0

我在 Django 1.4 中遇到了以下奇怪的问题:

#forms.py
from django import forms
class MyForm(forms.Form):
    my_choices = forms.ChoiceField()

# views.py
def my_view(request):
    vchoices = (('a', 'AAAA'),
               ('b', 'BBBB'),)

    form = MyForm()
# version1:
    form.my_choices=choices
# version2:
    form.my_choices.choices=vchoices

    context={'form': form}
    return render(request,index.html", {'form': form})

考虑上面的代码:如果我使用版本 1,我可以正确渲染输出,当然选择框中没有选择。如果我使用 version2,我会收到以下错误:

MyForm 对象没有属性“my_choices”

怎么会这样???在版本 1 中,'my_choices' 属性似乎存在,至少 django 没有抱怨。

第二个问题是:如果我按以下方式设置我的 forms.py

#forms.py
from django import forms
class MyForm(forms.Form):
    my_choices = forms.ChoiceField()
    my_choices.choices=(('a','aaaa'),('b','bbbb'))

表单正确呈现,下拉框包含选项。

知道如何解释这一点,或者如何在 views.py 中设置 my_choices 的属性选择吗?

非常感谢

4

1 回答 1

2

像这样的表单字段my_choices不会成为表单实例的属性。相反,他们成为form.fields字典的成员。您可以从form.fields['my_choices'].

然而,通常的方法是通过表单的__init__方法:

class MyForm(forms.Form):
    my_choices = forms.ChoiceField()

    def __init__(self, *args, **kwargs):
        choices = kwargs.pop('choices')
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['my_choices'] = choices

并使用 . 实例化您的表单form = MyForm(choices=my_choices)

于 2013-03-08T15:49:53.410 回答