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

ola*_*ndo 0 forms django field

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

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField( widget=forms.RadioSelect(), CHOICES,label="choices")
Run Code Online (Sandbox Code Playgroud)

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

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

Dom*_*ger 5

假设CHOICES是该领域的一个选项元组,变化相对简单:

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField(widget=forms.RadioSelect(),
                              choices=CHOICES,
                              label="choices")
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档ChoiceField文档choices.

修改后发布的更改:

简短的回答

你可能会混淆你所调用的字段choiceschoiceschoices字段上的属性.

说你有一个表格:

my_form = PlaylistsForm()
Run Code Online (Sandbox Code Playgroud)

您可以像这样访问字段的choices属性choices:

my_form.fields['choices'].choices
Run Code Online (Sandbox Code Playgroud)

答案很长

我不知道怎么做你想要的,所以我import pdb; pdb.set_trace()在宣布一个表格之后就卡住了,就像这样:

form = PlaylistsForm()
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

然后,使用开发服务器,我打开了一个URL,该URL映射到我的新视图import pdb; pdb.set_trace().切换到我的命令提示符,我可以在调试提示符下检查我的表单对象上存在哪些属性和方法:

(Pdb) dir(form)
Run Code Online (Sandbox Code Playgroud)

这表明我form有一个fields属性,所以我看了看:

(Pdb) form.fields
Run Code Online (Sandbox Code Playgroud)

这表明我form.fields是一个dict,值为Field对象,我挑选了choices字段,并查看它有什么属性:

 (Pdb) dir(form.fields['choices'])
Run Code Online (Sandbox Code Playgroud)

这告诉我form.fields['choices']有一个choices属性:

(Pdb) form.fields['chiices'].choices
[('', '---------'), (1L, My Playlist')]
Run Code Online (Sandbox Code Playgroud)

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