【问题标题】:Remove default blank option ----- with blank=True删除默认空白选项 ----- 空白 = True
【发布时间】:2016-04-10 14:18:31
【问题描述】:

我正在使用 Django 创建一个表单。 该表单包括models.SmallIntegerField

该字段有一个默认的空白选项(显示为“------”)。

我怎样才能摆脱这个空白选项?

请注意,该字段不是必需的(空白=True),因此default=None, blank=False 解决方案不适用于我的情况。

【问题讨论】:

  • 如果不需要该字段,为什么要删除空白选项?
  • 因为用户可以选择“数据不可用”复选框,如果选中,则不需要该字段。如果未选中,则该字段为必填项。
  • 而且因为我使用 RadioSelect 小部件,所以它与“----”字段看起来很奇怪。

标签: django django-forms


【解决方案1】:

我自己找到了解决方案:它既老套又丑陋,但它确实有效。

如果您有更好的解决方案,请随时发表评论或发布其他答案。

class myModelForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(myModelForm, self).__init__(*args, **kwargs)
        self.fields['choose'].choices = self.fields['choose'].choices[1:]

    class Meta:
        model = myModel
        widgets = {
            'choose': RadioSelect(),
        } 

【讨论】:

  • 另一个选项是子类化小部件并让它加载一个总是删除第一个选项的 js 文件。不过不要认为这更好。
  • 这可能行得通,但听起来黑客同样丑陋 ;-)