【问题标题】:Django: where are the fields stored inside a form instanceDjango:存储在表单实例中的字段在哪里
【发布时间】:2011-05-21 13:54:58
【问题描述】:

假设我创建了一个包含单选框选择的 django 表单:

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

如果我尝试实例化表单并执行form.choices,则会收到一个错误,即该实例没有choices 属性。您能否向我介绍一下它解释了创建字段背后的魔力的地方,其次,我如何访问这些字段?

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

【问题讨论】:

    标签: django forms field


    【解决方案1】:

    假设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.fieldsdict,其值为Field 对象,我选择了choices 字段,并查看它具有哪些属性:

     (Pdb) dir(form.fields['choices'])
    

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

    (Pdb) form.fields['chiices'].choices
    [('', '---------'), (1L, My Playlist')]
    

    这可能就是你要找的。​​p>

    【讨论】:

    • 抱歉,我的问题不够清楚,我已经重新编辑了 - 我想知道如何从 Form 的实例中访问 form.choices。
    • @noam - 希望这能解释如何做你所追求的,并帮助你在未来找出类似的问题!
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2021-09-07
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多