我有一个由表单组成的表单集,其中我排除了要以编程方式填写的必填字段,而不是要求用户填写它。
我的期望是,我可以从我的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
。