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-входы