Django Model Formset忽略is_valid()上的Form实例

时间:2018-10-01 10:32:39

标签: django django-forms

我有一个由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)

1 个答案:

答案 0 :(得分:2)

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

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