Django Advantage forms.Form vs forms.ModelForm

时间:2010-09-30 05:33:25

标签: django-models django-forms

有一个与此非常相似的问题,但我想以不同的方式提出这个问题。

我是一个非常定制的人,但我确实喜欢走快捷方式。所以就这样了。

我发现这两个类非常相似,尽管一个“帮助”程序员更快地编写代码或者代码/重复代码更少。将模型连接到表单听起来很明显。使用ModelForm的文档中有一点不是特别清楚。如果您需要添加模型中没有的额外字段或某种方式连接到另一个模型,会发生什么?

我想你可以将其子类化并使其工作,但这是否真的有助于节省时间,而不仅仅是手动使用表单?

因此,如果我将其子类化,并使用ModelForm,那么下一个问题可能没有明确的答案。 ModelForm特别比Form快吗?它是否仍然使用相同的更新技术,或者在一个或另一个中明显更快地绑定?

1 个答案:

答案 0 :(得分:3)

如果你想要一个跨两个模型的表单,你有两个选择:

1)创建两个模型,在发布时单独保存每个模型,如果其中一个依赖于另一个(即外键),请在保存前在视图中设置。

2)尝试Django的内联formset:http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-an-inline-formset-in-a-view

3)将非模型字段添加到模型中。在ModelForm上,您可以添加与模型无关的字段。它们在cleaning_data中可用,因为任何其他字段都可以,但在保存模型时会被忽略。

ModelForm对Form的一个优点是你可以指定字段的顺序(搜索如何订购带来你的帖子的表单字段)。显而易见的其他优点是您不必重写模型保存代码