Как реализовать edit-form с помощью Django formset?

Я реализовал django-форму с набором форм. Когда я создаю новый объект, все работает. Но столкнулся с проблемой при редактировании формы, когда я не изменяю данные формсета (только данные вне формсета). Формсет выдает ошибку: id Requeired. Если я помечаю поля набора форм для удаления, а затем добавляю новые поля, то это тоже работает. Пожалуйста, объясните мне, что происходит и как решить эту проблему. Спасибо! Мой набор форм:

IngredientsFormSet = forms.inlineformset_factory(
    Recipe,
    RecipeIngredientsDetails,
    fields="__all__",
    can_delete=True,
    min_num=2,
    max_num=50,
    extra=0,
)

И мой вид-функция:

def recipe_edit(request, recipe_id=None):
    if recipe_id:
        recipe = get_object_or_404(Recipe, id=recipe_id)
    else:
        recipe = Recipe()

    if request.method == "POST":
        form = RecipeCreateForm(data=request.POST, files=request.FILES)
        formset = IngredientsFormSet(data=request.POST,
                                     prefix=INGREDIENT_FORMSET_PREFIX)
        if form.is_valid() and formset.is_valid():
            recipe = form.save(commit=False)
            recipe.author_id = request.user.id
            recipe.save()
            form.save_m2m()
            formset.instance = recipe
            formset.save()
            return redirect(reverse_lazy("index"))
        context = {"form": form, "formset": formset}
        return render(request, template_name="recipe-create.html",
                      context=context)

    form = RecipeCreateForm(instance=recipe)
    formset = IngredientsFormSet(
        instance=recipe,
        prefix=INGREDIENT_FORMSET_PREFIX,
    )

    context = {
        "form": form,
        "formset": formset,
    }

    return render(request, context=context, template_name="recipe-create.html")
Вернуться на верх