这是一个基本的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