【问题标题】:How do I control the order of form fields in Django?如何控制 Django 中表单字段的顺序?
【发布时间】:2017-04-23 00:13:58
【问题描述】:

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

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

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

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

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

我没有找到适当的方法来控制输入字段的出现顺序。我怎样才能最好地做到这一点?

【问题讨论】:

  • 您可以通过{{form.hours}}{{form.description}} 等方式访问表单的字段。
  • 如果用户必须要控制它,只需将其中一些渲染为隐藏,并使用JS显示/隐藏一些字段。

标签: django forms django-templates


【解决方案1】:

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

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

Form.field_order

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

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

Form.order_fields(field_order)

您可以随时使用order_fields()field_order 中的字段名称列表重新排列字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2015-02-17
    • 2010-09-25
    • 2010-10-29
    • 1970-01-01
    • 2013-01-08
    • 2019-04-12
    相关资源
    最近更新 更多