Django + Forms:ChoiceField的动态选择

use*_*186 6 forms django

我正在尝试为ChoiceField创建一个动态的选择列表,但我似乎无法调用请求.这是代码:

错误:

AttributeError: 'CreationForm' object has no attribute 'request'
Run Code Online (Sandbox Code Playgroud)

形式

class FooForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(FooForm, self).__init__(*args, **kwargs)
        bars = self.request.session['bars']
        foo_list = []
        for bar in bars:
            foo_list.append((bar['id'], bar['name']),)
        self.fields['foo'].choices = foo_list
    foo = forms.ChoiceField(choices=foo_list, required=True)
Run Code Online (Sandbox Code Playgroud)

che*_*gat 19

为什么不在实例化表单时从视图中传递选项?

例如

形成:

class FooForm(forms.Form):
    def __init__(self, foo_choices, *args, **kwargs):
        super(FooForm, self).__init__(*args, **kwargs)
        self.fields['foo'].choices = foo_choices

    foo = forms.ChoiceField(choices=(), required=True)
Run Code Online (Sandbox Code Playgroud)

视图:

... 
bars = request.session['bars']
foo_list = []
for bar in bars:
    foo_list.append((bar['id'], bar['name']),)
form = FooForm(foo_list)
...
Run Code Online (Sandbox Code Playgroud)