我需要渲染一个我显示的视图:
用户点击保存后,应保存模型A和所有模型B.然后,在正确更新字段的情况下呈现相同的视图。
有一种特殊情况,这个视图必须是init,模型B表格填充了来自另一个模型(C)的数据。
我正在尝试使用FormView实现此视图,FormView为模型A呈现ModelForm,为模型B呈现formset,没有运气。这是正确的方法吗?什么样的表格适合更好?
答案 0 :(得分:0)
有几种方法可以做到这一点。您可以使用FormView,也可以使用CreateView和UpdateView。如果有多个表单,则需要至少覆盖视图中的四种方法:
每个对象都应该定义其ModelForm类(在forms.py中)。如果有一个类的多种形式与另一个类的实例相关,则应使用Django formsets。
您还可以尝试将所有逻辑放在窗体类中,并在视图中使用最少的代码。这是我使用crispy_forms时的首选方式,我认为它更短更清洁。在主类的ModelForm类中,我初始化所有其他表单并将POST数据传递给它们。使用crispy_forms我将所有表单放在主表单中(使用FormHelper和Layout),以便您通过单个{%crispy form%}
在模板中调用所有表单步骤如下: