我的一个模型中有一个字段,如下所示:
PAYROLL_CHOICES = (
('C1', 'Choice1'),
('C2', 'Choice2')
etc.....
)
payrollProvider = models.CharField(max_length=2, choices=PAYROLL_CHOICES)
当我为这个字段创建一个模型表单时,Django 正确地生成了一个 HTML 选择框,但包含一个默认的空白值“——–”。
我想知道如何将此默认值更改为其他一些文本,例如“请选择值”。
我相信我应该能够通过以下方式在我的模型表单的 初始化 中设置它,如 本答案 和其他几个答案中所述:
self.fields['payrollProvider'].empty_label = "please choose value"
但是,这对我不起作用。当我在表单的 init 中包含该行时,“——–”仍显示为选择框中的初始选项。我在下面粘贴了相关的 forms.py,但似乎其他人 也无法访问/修改 empty_label 。在此链接上,发问者描述了一种 删除 默认 empty_label 值的方法(我能够通过他的方法成功完成)但我真正想做的是 修改 显示的 empty_label 。
有任何想法吗?
这是 forms.py 中表单的代码,其中 empty_label 代码无法成功更改默认值“———-”:
class PayrollCredentialForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(PayrollCredentialForm, self).__init__(*args, **kwargs)
self.fields['payrollUsername'].widget.attrs.update({'class' : 'yp-signup'})
self.fields['payrollPassword'].widget.attrs.update({'class' : 'yp-signup'})
self.fields['payrollProvider'].widget.attrs.update({'class' : 'yp-signup'})
self.fields['payrollUsername'].widget.attrs.update({'placeholder' : ' Payroll Username'})
self.fields['payrollPassword'].widget.attrs.update({'placeholder' : ' Payroll Password'})
self.fields['payrollProvider'].empty_label = "please choose value"
class Meta:
model = Company
fields = ('payrollProvider', 'payrollUsername', 'payrollPassword')
widgets = {
'payrollPassword': forms.PasswordInput(),
}
原文由 CQP 发布,翻译遵循 CC BY-SA 4.0 许可协议
问题是您正在尝试指定某些不适用于 Select 字段类型的内容。
empty_label 选项适用于 forms.ModelChoiceField,它恰好使用 Select 小部件,但与您为其提供选项的 CharField 的字段类型不同。
https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield
您也可以在此处的前一个问题中看到这一点: https ://stackoverflow.com/a/740011/1406860
您可以尝试覆盖模型表单的 html 以将第一个选项添加为“请选择值”。或者,您可以使用模板过滤器来做同样的事情。最后,您可以和 (“”, “please choose value”) 到 PAYROLL_CHOICES,如果您不想在没有 payrollProvider 的情况下提交它,只需为模型中的字段设置 blank=False。
京东