Django - 无法从 TypedChoiceField 中删除 empty_label

标签 django django-forms

我的模型中有字段:

TYPES_CHOICES = (
    (0, _(u'Worker')),
    (1, _(u'Owner')),
)
worker_type = models.PositiveSmallIntegerField(max_length=2, choices=TYPES_CHOICES)

当我在 ModelForm 中使用它时,它具有“---------”空值。它是 TypedChoiceField 所以它没有 empty_label 属性。所以我不能在表单 中覆盖它。初始化 方法。

有什么办法可以去掉那个“---------”?

该方法也不起作用:
def __init__(self, *args, **kwargs):
        super(JobOpinionForm, self).__init__(*args, **kwargs)
        if self.fields['worker_type'].choices[0][0] == '':
            del self.fields['worker_type'].choices[0]

编辑:

我设法让它以这种方式工作:
def __init__(self, *args, **kwargs):
    super(JobOpinionForm, self).__init__(*args, **kwargs)
    if self.fields['worker_type'].choices[0][0] == '':
        worker_choices = self.fields['worker_type'].choices
        del worker_choices[0]
        self.fields['worker_type'].choices = worker_choices

最佳答案

任何模型字段的空选项,其选择在 .formfield() 中确定模型字段类的方法。如果您查看此方法的 django 源代码,该行如下所示:

include_blank = self.blank or not (self.has_default() or 'initial' in kwargs)

因此,避免空选项的最简洁方法是在模型的字段上设置默认值:
worker_type = models.PositiveSmallIntegerField(max_length=2, choices=TYPES_CHOICES, 
                                               default=TYPES_CHOICES[0][0])

否则,您只能手动破解 .choices表单的 __init__ 中表单字段的属性方法。

关于Django - 无法从 TypedChoiceField 中删除 empty_label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928565/

相关文章:

python - 在 Django 中减去日期时间 - 无输出

javascript - 在Django项目中通过javascript将数据写入cookie

django - 如何在夹层 Multi-Tenancy 中启用每个站点模板

python - 基于模型在 Django 中自动生成页脚的正确方法

django-forms - 如何在 Django FormView 中使用 get_success_url() 发送成功消息

django - ValueError - 无法创建消火栓,因为数据未验证

python - Django:从模板中的表单小部件访问模型字段

python - 使用 Django 的每个模型的唯一 HTML 元素 ID

python - Nginx、django、gunicorn、ubuntu 14.04 (13 : Permission denied) while connecting to upstream

python - 创建动态选择字段