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

rea*_*ime 5 forms django django-templates

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

from django import forms
class TimesForm(forms.Form):
     hours = forms.DecimalField()
     description = forms.CharField()
     topic = forms.CharField()
Run Code Online (Sandbox Code Playgroud)

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

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

{% for field in form %}
{{field}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我没有找到控制输入字段外观顺序的正确方法.我怎么做到最好?

Ada*_*lor 7

Django的表单API文档的"关于字段排序的注释"部分:

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

Form.field_order

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

您还可以使用a的Form.field_order参数Form来覆盖字段顺序.如果Form定义field_order 你包括field_order实例化时Form,那么后者field_order将具有优先权.

Form.order_fields(field_order)

您可以随时使用order_fields()字段名称列表重新排列字段,如field_order.