Django - форма, делающая один родительский объект и несколько дочерних объектов

Я пытаюсь сделать форму на основе модели Django, которая позволит создать две модели, одна из которых будет передаваться как внешний ключ второй.

models.py

class Recipe(models.Model):
    name = models.CharField(max_length=200)
    
    def __str__(self):
        return self.name

class Ingredient(models.Model):
    name = models.CharField(max_length=200)
    quantity = models.CharField(max_length=200)
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

формы

class IngredientForm(ModelForm):
    class Meta:
        model = Ingredient
        fields = ['name', 'quantity']

class RecipeForm(ModelForm):
    class Meta:
        model = Recipe
        fields = ['name']

и views.py ---- вот в чем проблема

def new_recipe_create_view(request, *args, **kwargs):
    context = {}
    created_recipe = None
    form = RecipeForm()
    if request.method == 'POST':
        form = RecipeForm(request.POST)
        if form.is_valid():
            print("recipe successfully created")
            form.save()
            name = form.data['name']
            created_recipe = Recipe.objects.filter(name=name).last()
#new recipe is being made correctly
            
    IngredientFormSet = inlineformset_factory(Recipe, Ingredient, fields=('name', 'quantity'), extra=3, max_num=10, labels = {
            'name': (''),
            'quantity': (''),
        })

    if request.method == 'POST':
        formset = IngredientFormSet(request.POST, instance=created_recipe)
        if formset.is_valid():
            formset.save()
        else:
            print("formset is not valid") # <------------------------------------------
    else:
        formset = IngredientFormSet( instance=created_recipe)

    if form.is_valid() and formset.is_valid():
        return redirect('index')

    context['formset'] = formset
    context['form'] = form
    return render(request, 'recipes/create_recipe.html', context)   

часть с inlineformset_factory, я сделал следующие документы: https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/#inline-formsets

Глава: Использование встроенного набора форм в представлении

но это не работает -> formset.is_valid() возвращает False Где проблема?

Похоже, что вам не хватает {{formset.management_form}} в шаблоне HTML.

поместите это в качестве дочернего тега формы.

<form ...>
    {{form...}}
    {{formset..}}
    {{formset.management_form}}
</form>
Вернуться на верх