0
django에서이 inlineformset_factory를 만들었으며 필드 중 하나에 위젯을 추가했습니다. 하지만 "attrs"가 없다는 오류가 발생합니다. 그런 다음 "attrs"를 추가하면 "예기치 않은 키워드 인수 'attrs'가 표시됩니다.Inlineformset_factory 위젯 - 객체에 'attrs'속성이 없습니다.
여기에 inlineformset_factory가 있습니다.
UNIT_CHOICES = (('dl', 'dl'), ('l', 'l'), ('kg', 'kg'),)
IngredientFormSet = inlineformset_factory(RecipeModel, Ingredient, can_delete=False, extra=MAX_INGREDIENTS, exclude=[],
widgets={'unit_type': forms.ChoiceField(attrs={}, label="Måleenhet", required=True, widget=forms.Select, choices=UNIT_CHOICES)})
여기에 제가 빠뜨린 것들이 있습니다.
forms.py :
class AddRecipeForm(ModelForm):
products = Product.objects.all()
recipes = RecipeModel.objects.all()
choices =()
iterate = 1
for product in products:
if not recipes.filter(title=product.name).exists():
choices = ((product.name, product.name),) + choices
iterate += 1
title = forms.ChoiceField(label="Navn på produktet til oppskriften", required=True, widget=forms.Select, choices=choices)
class Meta:
model = RecipeModel
exclude = []
class IngredientForm(ModelForm):
title = forms.CharField(max_length=255, widget=TextInput(attrs={'id': 'ingredient_title',
'class': 'ingredient_class'}))
class Meta:
model = Ingredient
exclude = ['recipe']
views.py
def add_recipe(request):
if request.POST:
form = AddRecipeForm(request.POST)
if form.is_valid():
recipe = form.save(commit=False)
ingredient_formset = IngredientFormSet(request.POST, instance=recipe)
if ingredient_formset.is_valid():
recipe.save()
ingredient_formset.save()
return redirect('admin_site')
else:
return redirect('admin_site')
else:
return redirect('admin_site')
else:
form = AddRecipeForm()
ingredient_formset = IngredientFormSet(instance=RecipeModel())
return render(request, 'admin/add_recipe.html', {
'form': form,
'ingredient_formset': ingredient_formset,
}, context_instance=RequestContext(request))
models.py 당신이 위젯을 지정하고 있기 때문에, 당신은 필드를 지정할 필요가 없습니다
class RecipeModel(models.Model):
title = models.CharField("Navn på produktet", max_length=255, default="")
kilogram_bottle = models.FloatField("Kg råvare for et produkt", blank=True)
deciliter_bottle = models.FloatField("Deciliter råvare for et produkt", blank=True)
description = models.TextField("Oppskrifts detaljer", default="")
class Ingredient(models.Model):
recipe = models.ForeignKey(RecipeModel, on_delete=models.CASCADE)
ingredient_title = models.CharField("Navn på ingrediens", max_length=255, default="")
unit_before = models.FloatField("Råvare", blank=True, null=True)
unit_after = models.FloatField("Ferdig behandlet råvare", blank=True, null=True)
unit_type = models.CharField("Måleenhet", max_length=255)
나는 형태에 관련된 다른 대부분의 코드를 추가됩니다. 나는 당신과 비슷하게 만들었지 만, "unit_type"이 외래 키 모델의 필드 인 것을 보았습니다. 나는 그것을 자신의 modelform에 넣었다. 그리고 나는 두 가지 형태의 견해를 연결하고 있습니다 (나는 그것이 내가 한 것이라고 생각합니다). –