Django 内联表单集更新模型
Django inline formsets updating a model
我正在竭尽全力尝试让 Django 的表单集在更新模型时正常工作。
我有 2 个模型,Product
和 ProductSize
。在添加或编辑 Product
时,我正在使用内联表单集将 link 我的 ProductSize
转换为 Product
。添加对象没问题,但是当我尝试编辑 Product
时,我无法提交表单。我在下面的 print
中得到 [{'id': ['This field is required.']}]
输出。
以下是我的观点:
class ProductAdd(AddModelView):
model = Product
form_class = UpdateProductForm
template_name = 'intake_goods_form.jinja'
title = 'Add Product Type'
formset_class = ProductSizesFormSet
def form_valid(self, form):
obj = form.save()
formset = self.formset_class(self.request.POST)
if formset.is_valid():
formset.instance = obj
formset.save()
else:
print(formset.errors)
return self.form_invalid(form)
return super().form_valid(form)
def get_context_data(self, **kwargs):
if self.request.POST:
formset = self.formset_class(self.request.POST, instance=self.object)
else:
formset = self.formset_class(instance=self.object)
return super().get_context_data(formsets=formset, **kwargs)
product_type_add = ProductAdd.as_view()
class ProductEdit(ProductAdd, UpdateModelView):
model = Product
form_class = UpdateProductForm
product_type_edit = ProductEdit.as_view()
这是我的表格:
class UpdateProductForm(SVModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class Meta:
model = Product
exclude = {'material'}
class ProductSizeForm(SVModelForm):
title = 'Product Type Sizes'
class Meta:
model = ProductSize
fields = ['sku_code', 'bar_code', 'size']
ProductSizesFormSet = forms.inlineformset_factory(Product, ProductSize, ProductSizeForm, extra=1, can_delete=False)
有人能帮忙吗?
谢谢
好的,所以我找到了解决方案,抱歉,从我发布的问题中不可能找出答案。
在模板中,我只是循环访问表单集的可见字段。所以当然不包括ID。
如果需要,确保在模板中包含 formset.id
字段。
我正在竭尽全力尝试让 Django 的表单集在更新模型时正常工作。
我有 2 个模型,Product
和 ProductSize
。在添加或编辑 Product
时,我正在使用内联表单集将 link 我的 ProductSize
转换为 Product
。添加对象没问题,但是当我尝试编辑 Product
时,我无法提交表单。我在下面的 print
中得到 [{'id': ['This field is required.']}]
输出。
以下是我的观点:
class ProductAdd(AddModelView):
model = Product
form_class = UpdateProductForm
template_name = 'intake_goods_form.jinja'
title = 'Add Product Type'
formset_class = ProductSizesFormSet
def form_valid(self, form):
obj = form.save()
formset = self.formset_class(self.request.POST)
if formset.is_valid():
formset.instance = obj
formset.save()
else:
print(formset.errors)
return self.form_invalid(form)
return super().form_valid(form)
def get_context_data(self, **kwargs):
if self.request.POST:
formset = self.formset_class(self.request.POST, instance=self.object)
else:
formset = self.formset_class(instance=self.object)
return super().get_context_data(formsets=formset, **kwargs)
product_type_add = ProductAdd.as_view()
class ProductEdit(ProductAdd, UpdateModelView):
model = Product
form_class = UpdateProductForm
product_type_edit = ProductEdit.as_view()
这是我的表格:
class UpdateProductForm(SVModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class Meta:
model = Product
exclude = {'material'}
class ProductSizeForm(SVModelForm):
title = 'Product Type Sizes'
class Meta:
model = ProductSize
fields = ['sku_code', 'bar_code', 'size']
ProductSizesFormSet = forms.inlineformset_factory(Product, ProductSize, ProductSizeForm, extra=1, can_delete=False)
有人能帮忙吗?
谢谢
好的,所以我找到了解决方案,抱歉,从我发布的问题中不可能找出答案。
在模板中,我只是循环访问表单集的可见字段。所以当然不包括ID。
如果需要,确保在模板中包含 formset.id
字段。