Django:ChoiceField 不返回选项

Posted

技术标签:

【中文标题】Django:ChoiceField 不返回选项【英文标题】:Django: ChoiceField not returning options 【发布时间】:2014-07-02 22:16:29 【问题描述】:

我在尝试获取一个简单的选择字段以将其选项返回到我的应用程序中的 html 页面时遇到问题。我一直在查看其他几个问题1、2 和一些在线教程,但似乎无法正确解决。

我当前的代码不返回下拉菜单,它只返回提交按钮。

理想情况下,我希望在下拉列表中返回国家/地区,并可选择将其设为必填字段。

我可以使用 models.Model 使用这种方法返回类似的视图,但似乎无法从 forms.Form 获得 ChoiceField 工作。

非常感谢任何帮助,谢谢。

models.py

from django import forms

class CountryChoiceTwo(forms.Form):

    IRELAND = 'IR'
    ENGLAND = 'EN'
    FRANCE = 'FR'
    SCOTLAND = 'SC'
    WALES = 'WA'
    ITALY = 'IT'

    COUNTRY = (
        (IRELAND, "Ireland"),
        (ENGLAND, "England"),
        (FRANCE, "France"),
        (SCOTLAND, "Scotland"),
        (WALES, "Wales"),
        (ITALY, "Italy"),
               )

    origin = forms.ChoiceField(widget=forms.Select(), choices=COUNTRY, initial= IRELAND)

    def __unicode__(self):
        return self.origin

views.py

from books.models import CountryChoiceTwo

def ContactForm(request):

    form = CountryChoiceTwo(initial='origin':COUNTRY[1])   
    return render(request, 'country_choice.html', 'form': form )

country_choices.html

<h2>What country are you from?</h2>


<form action="" method="post">
    % csrf_token %

    form.as_p


<input type="submit" value="Vote" />               
</form>

【问题讨论】:

当你说返回时,你的意思是下拉菜单没有出现在呈现的 HTML 页面上,或者一旦选择它就不会提交到视图? 对不起,我的意思是下拉菜单甚至没有出现在 HTML 页面中 模板的其余部分出现了吗? (比如“你来自哪个国家?”部分 您没有收到COUNTRY 未定义的错误?它没有在您的视图函数中定义。你需要做CountryChoiceTwo.COUNTRY 不,它没有给我一个错误。我的views.py文件中有另一个视图“def Country(request):”,它至少会从另一个模型返回一些数据。我现在可以删除它,以防它造成混乱。 【参考方案1】:

COUNTRY 未在您的视图函数范围内定义。

您可以在表单中引用COUNTRY,方法是在其前面加上类名:

def ContactForm(request):
    form = CountryChoiceTwo(initial='origin': CountryChoiceTwo.COUNTRY[1])
    return render(request, 'country_choice.html', 'form': form )

【讨论】:

以上是关于Django:ChoiceField 不返回选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 表单 ChoiceField 中获取选项标签?

Django:如何在给定实际值和选项的情况下访问模板中 ChoiceField 的显示值?

choiceField的“禁用”选项 - Django

Django Form 将 ChoiceField 选项设置为 Form 被调用

Django MultiValueField - 如何将选择传递给 ChoiceField?

如何根据先前的用户选择在 Django 中预填充(多个)ChoiceField