這是一個基本的Python問題。您需要考慮執行這些命令的順序及其範圍。
首先,您定義一個名爲Test的表單類。該類有三個屬性:set_choices
方法,get_choices
方法和options
字段。這些定義在類定義時進行評估。 options
的定義調用get_choices()
。但是,此時在範圍內沒有get_choices
方法,因爲該類尚未定義。
即使您以某種方式設法排除了範圍問題,但這仍然無法達到您想要的效果,因爲options
的選擇定義是在定義時完成的。即使您稍後致電set_choices
,options
仍然具有在定義該字段時返回的值get_choices
。
那麼,你究竟想要做什麼?看起來你想在options
字段上設置動態選項。所以,你應該覆蓋__init__
方法並在那裏定義它們。
class Test(forms.Form):
options = forms.ChoiceField(choices=())
def __init__(self, *args, **kwargs):
choices = kwargs.pop('choices', None)
super(Test, self).__init__(*args, **kwargs)
if choices is not None:
self.fields['options'].choices = choices
您是否仔細閱讀了文檔? http://docs.djangoproject.com/en/1.3/topics/forms/ – Nacho 2011-04-21 12:59:14