Django 模型表单集忽略 is_valid() 上的表单实例



我有一个由表单组成的表单集,其中我排除了要以编程方式填写的必填字段,而不是要求用户填写它。

我的期望是,我可以从我的request.POST字典中排除它,并使用下面的行添加它,并且is_valid()方法将使用request.POST数据和添加到传递给表单的实例的初始数据来验证和保存它。

form_kwargs={"instance": MyModel(sale=5)}

# My view.py
formset = self.get_formset(
data=self.request.POST,
form_kwargs={"instance": MyModel(sale=5)}
)
# Error here, 'sale' is not set.
if formset.is_valid():
formset.save()

get_formset()方法返回窗体集的实例。

# My formset factory method
def get_formset(self, **kwargs):
MyFormSet = forms.modelformset_factory(MyModel, form=MyForm)
...
return MyFormSet(**kwargs)

不,Django 永远不会使用初始数据来代替丢失的已发布数据 - 否则你怎么能使用表单将字段设置为空?相反,您应该从表单中排除该字段,在这种情况下,将保留现有实例值。

要么在 MyForm 的元类中显式执行此操作,要么将exclude参数传递给modelformset_factory

最新更新