2014-02-21 35 views
1

我有一個類,其中包括一個選擇列表中的字段:如何替換Django窗體中的TypedChoiceField的選擇列表?

class Game(models.Model): 
    track = models.CharField(max_length=5, 
          choices=AllTracks.TRACK_CHOICES) 

我想使用基於該模型形式,但我想通過它選擇列表,PublicTracks.TRACK_CHOICES的一個子集。

我看過表格的結構。在base_fields字典中,track是一個TypedChoiceField對象。該對象有一個屬性choices,它是list(AllTracks.TRACK_CHOICES)。我試過用list(AllTracks.TRACK_CHOICES)替換它,但它似乎並不需要。

任何有關如何從模型定義覆蓋列表的建議將不勝感激。

回答

0

您可以在表單類中定義一個完全自定義字段,重寫一個,這將是從你的模型自動生成,否則,如Overriding the default fields描述:

class GameForm(forms.ModelForm): 

    track = forms.ChoiceField(choices=WHATEVER, ...) 

    class Meta(object): 
     model = Game 
+0

真棒,謝謝!現在,我不認爲你有建議告訴它在meta類中的字段_before_,因此我仍然可以使用'{{event_form}}'而不必枚舉模板中的字段?文檔只是說要按照顯示順序放置字段,但即使「軌道」現在在其餘部分之前定義,它仍會顯示在底部。 –

+0

添加一個明確的'GameForm.Meta.fields'元組列出您的字段在所需的順序應該做的伎倆。 – lanzz

+0

啊,我明白了。我已經有了用模型中的字段定義的字段,但是我的本地軌道定義覆蓋了它。漂亮! –

相關問題