Django+;表单:ChoiceField的动态选择

Django+;表单:ChoiceField的动态选择,django,forms,Django,Forms,我试图为ChoiceField创建一个动态的选项列表,但似乎无法调用请求。代码如下: 错误: AttributeError: 'CreationForm' object has no attribute 'request' 表格 class FooForm(forms.Form): def __init__(self, *args, **kwargs): super(FooForm, self).__init__(*args, **kwargs) ba

我试图为ChoiceField创建一个动态的选项列表,但似乎无法调用请求。代码如下:

错误:

AttributeError: 'CreationForm' object has no attribute 'request'
表格

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)

为什么不在实例化表单时从视图中传入选择

e、 g

表格:

视图:


要处理
is\u valid()
操作上的验证,我认为这将起作用

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

    foo = forms.ChoiceField(choices=(), required=True)

以上代码未经测试

谢谢您的回答。我想避免将这两个操作分开,但似乎没有其他方法……方法的问题是,当您在另一个视图中对表单实例调用is_valid()时,没有传递任何选项,因此is_valid()总是返回false。我们如何在这个特殊表单中重用FormView?通常,FormView在实例化窗体时不接受参数。。。我是否必须编写FormView的自定义专门化?我可能弄错了,但这不会覆盖类属性base_字段吗?这意味着这将修改类而不是实例的选择?
... 
bars = request.session['bars']
foo_list = []
for bar in bars:
    foo_list.append((bar['id'], bar['name']),)
form = FooForm(foo_list)
...
class FooForm(forms.Form):
    def __init__(self, foo_choices, *args, **kwargs):
        self.base_fields['foo'].choices = foo_choices
        super(FooForm, self).__init__(*args, **kwargs)

    foo = forms.ChoiceField(choices=(), required=True)