假设我创建了一个django表单,其中包含一个单选框:
class PlaylistsForm(forms.Form):
choices=forms.ChoiceField( widget=forms.RadioSelect(), CHOICES,label="choices")
如果我尝试实例化表单并执行form.choices
,则会收到实例没有属性choices
的错误。你能不能把我介绍给它解释字段创建背后的魔力,其次,我怎样才能访问这些字段?
编辑:
为了说清楚:我想知道为什么,给定一个PlaylistsForm
的实例
print form.choices
我收到一条错误消息,说没有这样的属性。幕后发生了什么黑暗魔法?
答案 0 :(得分:5)
假设CHOICES
是该字段的选项元组,更改相对简单:
class PlaylistsForm(forms.Form):
choices=forms.ChoiceField(widget=forms.RadioSelect(),
choices=CHOICES,
label="choices")
有关详细信息,请参阅the documentation of ChoiceField
和the documentation of choices
。
您可能会混淆名为choices
的字段和choices
字段中的choices
字段。
说你有一张表格:
my_form = PlaylistsForm()
您可以像这样访问choices
字段的choices
属性:
my_form.fields['choices'].choices
我不知道怎么做你想要的,所以我在宣布一个表格之后就卡住import pdb; pdb.set_trace()
,就像这样:
form = PlaylistsForm()
import pdb; pdb.set_trace()
然后,使用开发服务器,我打开了一个URL,该URL映射到包含新import pdb; pdb.set_trace()
的视图。切换到我的命令提示符,我可以在调试提示符下检查我的表单对象上存在哪些属性和方法:
(Pdb) dir(form)
这表明我form
有一个fields
属性,所以我查看了它:
(Pdb) form.fields
这表明我form.fields
是一个dict
,其值为Field
个对象,我选择了choices
字段,并查看它有哪些属性:< / p>
(Pdb) dir(form.fields['choices'])
这表明我form.fields['choices']
有choices
属性:
(Pdb) form.fields['chiices'].choices
[('', '---------'), (1L, My Playlist')]
这可能就是你要找的东西。