Django:字段存储在表单实例中的哪个位置

时间:2010-12-07 12:57:38

标签: django forms field

假设我创建了一个django表单,其中包含一个单选框:

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField( widget=forms.RadioSelect(), CHOICES,label="choices")

如果我尝试实例化表单并执行form.choices,则会收到实例没有属性choices的错误。你能不能把我介绍给它解释字段创建背后的魔力,其次,我怎样才能访问这些字段?

编辑: 为了说清楚:我想知道为什么,给定一个PlaylistsForm的实例 print form.choices我收到一条错误消息,说没有这样的属性。幕后发生了什么黑暗魔法?

1 个答案:

答案 0 :(得分:5)

假设CHOICES是该字段的选项元组,更改相对简单:

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField(widget=forms.RadioSelect(),
                              choices=CHOICES,
                              label="choices")

有关详细信息,请参阅the documentation of ChoiceFieldthe 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')]

这可能就是你要找的东西。