代码之家  ›  专栏  ›  技术社区  ›  Marcus Lind

Django Model Formset ignore Form Instance on is\ u valid()

  •  0
  • Marcus Lind  · 技术社区  · 7 年前

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

    我的期望是我可以把它排除在我的工作之外 request.POST 字典,并添加它与下面的行,和 is_valid() 方法都将使用 请求.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 回复  |  直到 7 年前
        1
  •  2
  •   Daniel Roseman    7 年前

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

    exclude 参数到 modelformset_factory .