如何控制Django中表单字段的顺序?

时间:2016-12-07 21:38:44

标签: django forms django-templates

鉴于我有一个这样的通用形式:

from django import forms
class TimesForm(forms.Form):
     hours = forms.DecimalField()
     description = forms.CharField()
     topic = forms.CharField()

我想用html渲染这个表单, 动态控制外观顺序的最佳方法是什么? 换句话说,用户应该能够控制这些输入字段在屏幕上显示的顺序。

虽然我能够遍历这样的字段:

{% for field in form %}
{{field}}
{% endfor %}

我没有找到控制输入字段外观顺序的正确方法。我该如何做到最好?

1 个答案:

答案 0 :(得分:7)

来自the "Notes on field ordering" section of Django's forms API documentation

  

还有其他几种自定义顺序的方法:

     

Form.field_order

     

默认情况下为Form.field_order=None,它保留您在表单类中定义字段的顺序。如果field_order是字段名称列表,则按列表指定的顺序排序字段,并根据默认顺序追加其余字段。列表中的未知字段名称将被忽略。这样就可以通过将子类中的字段设置为None来禁用它,而无需重新定义排序。

     

您还可以使用Form.field_order Form参数来覆盖字段顺序。如果Form定义field_order ,则在实例化field_order时包含Form,则后者field_order将具有优先权。< / p>      

Form.order_fields(field_order)

     

您可以随时使用order_fields()重新排列字段,并在field_order中添加字段名称列表。