ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 使用元组时,ChoiceField不显示空标签

2019-09-28 15:06:04  阅读:151  来源: 互联网

标签:python django django-forms


我想做什么

我将在我的数据库中保存有关比赛的数据.我希望能够通过某些标准搜索比赛 – 尤其是比赛类型.

关于比赛类型

比赛类型保存在元组中.稍微缩短的例子:

COMPETITION_TYPE_CHOICES = (
    (1, 'Olympic Games'),
    (2, 'ISU Championships'),
    (3, 'Grand Prix Series'),
)

这些在模型中使用如此(再次 – 这是模型的缩短/简化版本):

class Competition(models.Model):
    name = models.CharField(max_length=256)
    type = models.IntegerField(choices=COMPETITION_TYPE_CHOICES) 

搜索表单

我不希望在搜索表单中需要字段,因此表单定义如下:

class CompetitionSearchForm(forms.Form):
    name = forms.CharField(required=False)
    type = forms.ChoiceField(choices=COMPETITION_TYPE_CHOICES,required=False)

问题

我希望ChoiceField中的select小部件显示一个空标签,但我没有得到一个.任何有关这方面的帮助将非常感谢:)

解决方法:

我发现了一种解决方案,可以按照我想要的方式工作而不违反DRY原则.不是很干净,但我认为这是必须的.

根据the documentation选择不必是一个元组:

Finally, note that choices can be any
iterable object — not necessarily a
list or tuple. This lets you construct
choices dynamically. But if you find
yourself hacking choices to be
dynamic, you’re probably better off
using a proper database table with a
ForeignKey. choices is meant for
static data that doesn’t change much,
if ever.

所以我现在要解决的解决方案是:

COMPETITION_TYPE_CHOICES = [
     (1, 'Olympic Games'),
     (2, 'ISU Championships'),
     (3, 'Grand Prix Series'),
]

COMP_TYPE_CHOICES_AND_EMPTY = [('','All')] + COMPETITION_TYPE_CHOICES

接着:

class CompetitionSearchForm(forms.Form):
    name = forms.CharField(required=False)
    type = forms.ChoiceField(choices=COMP_TYPE_CHOICES_AND_EMPTY, required=False)

该模型保持原样.

标签:python,django,django-forms
来源: https://codeday.me/bug/20190928/1827991.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有