我想在Django Select字段中使用占位符,但我不想将其包含在选项中。
我创建了一个空字段,如下所示:https://stackoverflow.com/a/6085935/2532070
choices = [(u'', u'Select Year')]
choices.extend([(unicode(year), unicode(year)) for year in range(1970, 2015)])
graduation = forms.ChoiceField(choices=choices)
此答案涵盖empty_label
的{{1}}参数:Customize/remove Django select box blank option
但我的是常规的Django形式。有没有办法让默认按钮渲染"选择年份"但不包括"选择年份"在下拉列表中?谢谢!
答案 0 :(得分:1)
您是否尝试在表单字段中添加某种自动填充功能?我会告诉你2种不同的方法,但是根据你想做什么,一个比另一个好。
第一种方式
这种方式是"泛型",如果您尝试使用类似select2
的内容,那么您的最佳答案是第二种方式
choices = [
(u'', u'Select Year'),
(u'1', u'1231'),
(u'2', u'1232')
(u'3', u'1233')
]
class your_form(forms.Form):
year = forms.ChoiceField(choices=YEAR_CHOICES, required=False)
def __init__(self, *args, **kwargs):
super(your_form, self).__init__(*args, **kwargs)
self.fields['year'].queryset = YEAR_MODEL.objects.none()
self.fields['year'].widget = forms.TextInput(attrs={'placeholder': _(u'Select Year')})
第二种方式
如果您尝试通过AJAX添加select2,则需要在模板中接收非选择字段,因此您需要以下内容:
class your_form(forms.Form):
year = forms.CharField(max_length=255, required=False)
def __init__(self, *args, **kwargs):
super(your_form, self).__init__(*args, **kwargs)
self.fields['year'].widget = forms.TextInput(attrs={'placeholder': _(u'Select Year')})
第一种方式和第二种方式之间的区别在于,字段year
的第一种方式是ChoiceField
我们覆盖__init__
函数以使选择器为空,第二种方式一个只是CharField
,我们可以根据需要进行管理(这种方式是为了防止您尝试通过AJAX使用select2自动完成功能)
在两个示例中,我们使用以下方法初始化文本框:
self.fields['year'].widget = forms.TextInput(attrs={'placeholder': _(u'Select Year')})
在__init__
覆盖