空标签 ChoiceField Django

新手上路,请多包涵

你如何使 ChoiceField 的标签表现得像 ModelChoiceField ?有没有办法设置 empty_label ,或者至少显示一个空白字段?

表格.py:

 thing = forms.ModelChoiceField(queryset=Thing.objects.all(), empty_label='Label')
color = forms.ChoiceField(choices=COLORS)
year = forms.ChoiceField(choices=YEAR_CHOICES)


我已经尝试过这里建议的解决方案:

Stack Overflow Q - 设置 CHOICES = [('','All')] + CHOICES 导致内部服务器错误。

Stack Overflow Q2 - 在我的选择中定义 ('', '---------'), 之后,仍然默认为列表中的第一项,而不是 ('', '---------'), 选择。

要点- 尝试使用 EmptyChoiceField 在此处定义,但无法使用 Django 1.4。

但是这些都不适合我..你会如何解决这个问题?谢谢你的想法!

原文由 Nick B 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

这是我使用的解决方案:

 from myapp.models import COLORS

COLORS_EMPTY = [('','---------')] + COLORS

class ColorBrowseForm(forms.Form):
    color = forms.ChoiceField(choices=COLORS_EMPTY, required=False, widget=forms.Select(attrs={'onchange': 'this.form.submit();'}))

原文由 Nick B 发布,翻译遵循 CC BY-SA 3.0 许可协议

请参阅有关 ChoiceField 的 Django 1.11 文档。 ChoiceField 的“空值”定义为空字符串 '' ,因此您的元组列表应包含一个键 '' 映射到您要为空字符串显示的任何值价值。

 ### forms.py
from django.forms import Form, ChoiceField

CHOICE_LIST = [
    ('', '----'), # replace the value '----' with whatever you want, it won't matter
    (1, 'Rock'),
    (2, 'Hard Place')
]

class SomeForm (Form):

    some_choice = ChoiceField(choices=CHOICE_LIST, required=False)

请注意,如果您希望表单字段是可选的,则可以通过使用 required=False 来避免表单错误

此外,如果您已经有一个没有空值的 CHOICE_LIST,您可以插入一个,使其首先显示在表单下拉菜单中:

 CHOICE_LIST.insert(0, ('', '----'))

原文由 Fiver 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题