Django UpdateView создает дублирующиеся наборы форм

У меня возникают проблемы при обновлении записей моих продуктов, скидок и запасов в базе данных, запасы и скидки имеют id продукта в качестве внешнего ключа, и я определил два линейных набора форм для ввода всех данных в одну форму

ProductMeta=forms.inlineformset_factory(Product,Inventory,InventoryForm,extra=0,can_delete=False)
DiscountMeta=forms.inlineformset_factory(Product,ProductDiscount,DiscountForm,extra=0,can_delete=False)

Происходит нечто странное, оба набора форм работают нормально при создании с использованием extra=1 в наборах форм, но в UpdateView я должен использовать extra=0, иначе формы инвентаризации и скидок дублируются, и обе формы исчезают из представления создания

views.py

class UpdateProduct(UpdateView):
    model=Product
    form_class =ProductForm
    template_name = 'new_product.html'
    title = "UPDATE PRODUCT"

    def get_context_data(self, **kwargs):
        context = super(UpdateProduct, self).get_context_data(**kwargs)
        if self.request.method == 'POST':
            context['product_meta_formset'] = ProductMeta(self.request.POST,instance=self.object)
            context['discount_meta_formset'] = DiscountMeta(self.request.POST,instance=self.object)
        else:
            context['product_meta_formset'] = ProductMeta(instance=self.object)
            context['discount_meta_formset'] = DiscountMeta(instance=self.object)
        return context
    
    def form_valid(self, form):
        context=self.get_context_data()
        productMeta=context['product_meta_formset']
        discountMeta=context['discount_meta_formset']
        if productMeta.is_valid() and discountMeta.is_valid():
            self.object=form.save()
            productMeta.instance=self.object
            productMeta.save()
            discountMeta.instance=self.object
            discountMeta.save()
        if not productMeta.is_valid():
            print("productMeta invalid")
        if not discountMeta.is_valid() :
            print("discountMeta invalid")
        return redirect(reverse("products:listProducts"))

По какой-то причине Django считает, что мои productMeta и discountMeta недействительны, поскольку оба отпечатка выполняются и, очевидно, изменения не сохраняются в базе данных, пока что я исправляю проблему inlineformset extra=0, используя другие inlineformsets, но я хотел бы знать, как решить проблему недействительного набора форм и правильно сохранить информацию.

NOTE: Наборы форм считывают данные из базы данных и помещают их в соответствующие html-входы

Вернуться на верх