In django habe ich diese inlineformset_factory gemacht und ich habe versucht, ein Widget zu einem der Felder hinzuzufügen. Aber ich bekomme den Fehler, dass es "attrs" fehlt. Ich füge dann die "attrs" hinzu und ich bekomme einen anderen Fehler, der "unerwartetes Schlüsselwortargument 'attrs'"Inlineformset_factory widgets - Objekt hat kein Attribut 'attrs' Fehler
sagt Hier ist die 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)})
Hier ist das Zeug, das ich weggelassen habe.
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)
ich die meisten anderen Code relevant zu dem Formular hinzugefügt. Ich habe es ähnlich wie Sie eingerichtet, aber sehen, wie "unit_type" ein Feld des Fremdschlüsselmodells ist. Ich habe es in seine eigene Modellform gebracht. Und ich stelle die Verbindung zwischen den beiden Formen in der Ansicht her (ich glaube, das habe ich getan). –