2016-12-07 52 views
4

假設我有一個通用的形式是這樣的:如何控制Django中表單字段的順序?

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

我想渲染這種形式在HTML中, 什麼是動態控制出場順序的最佳方式? 換句話說,用戶應該能夠控制這些輸入字段在屏幕上的顯示順序。

雖然我能夠通過這樣的字段進行迭代:

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

我沒有找到控制輸入字段出現的順序取之有道。我最好怎麼做?

+0

您訪問形式的田地這樣'{{form.hours}}','{{form.description}}'等 –

+0

如果用戶有控制它,只是使他們中的一些爲隱藏並使用JS來顯示/隱藏一些字段。 – makaveli

回答

4

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,那麼在實例化Form時包含field_order,則後者field_order將具有優先權。

Form.order_fields(field_order)

您可以重新排列字段使用order_fields()具有如field_order字段名稱列表中的任何時間。

相關問題