我在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的属性选择?
非常感谢
答案 0 :(得分:1)
my_choices
等表单字段不会成为表单实例的属性。相反,他们成为form.fields
字典的成员。您可以从form.fields['my_choices']
访问它。
然而,正常的方法是通过表单的__init__
方法:
类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)
实例化您的表单。