如何在一个视图中将两个ModelForms与以任意顺序显示的字段组合?

时间:2014-06-20 19:30:31

标签: python django forms

让我们说我有以下两个Django模型。

class FruitBasket(models.Model):
    apple = models.CharField()
    strawberry = models.CharField()

class VegetableGarden(models.Model):
    celery = models.CharField()
    turnip = models.CharField()

如果我想为用户创建一个视图,以便在同一表单中创建FruitBasketVegetableGarden,我可以为每个创建一个ModelForm并将其传递给我像这样看:

<form action="" method="post">
    {% csrf_token %}
    {{ fruit_form.as_p }}
    {{ vegetable_form.as_p }}
    <input type="submit" value="Submit" />
</form>

这将允许用户按顺序输入苹果,草莓,芹菜和萝卜字段。

相反,如果我想在萝卜,草莓,芹菜和苹果中显示字段,该怎么办?我想避免编写一个全新的Form类,因为我必须复制所有验证(clean函数)。在组合两种形式时,有没有办法随意决定字段的顺序?

1 个答案:

答案 0 :(得分:1)

{{ form.as_p }}只是展示表单的众多方法之一。您可以使用{{ form.name_of_field }}语法输出每个字段的小部件:

<form action="" method="post">
    {% csrf_token %}
    {{ vegetable_form.turnip }}
    {{ fruit_form.strawberry }}
    {{ vegetable_form.celery }}
    {{ fruit_form.apple }}
    <input type="submit" value="Submit" />
</form>

请注意,这不会显示错误。 {{ form.name_of_field.errors }}下提供了各个错误消息,您可以使用{{ form.errors }}访问表单错误消息。

请查看customizing the form template以获取有关此主题的更多信息。