我有一个由Form组成的Formset,其中排除了我要以编程方式填写而不是要求用户填写的必填字段。
我希望我可以将其从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)
答案 0 :(得分:2)
不,Django将永远不会使用初始数据来代替丢失的已发布数据-否则,您如何使用表单将字段设置为空?相反,您应该从表单中排除该字段,在这种情况下,将保留现有实例值。
要么在MyForm的Meta类中显式执行此操作,要么将exclude
参数传递给modelformset_factory
。