【问题标题】:ModelChoiceField: remove empty option and select default valueModelChoiceField:删除空选项并选择默认值
【发布时间】:2020-11-20 03:22:47
【问题描述】:

我正在使用models.ForeignKey 字段的默认表单字段,它是使用Select 小部件的ModelChoiceField

有问题的相关模型是Weekday,并且该字段可以为空,因此它不会对数百个现有条目强制使用默认值。但是,在实践中,我们的默认值应该是星期日,即Weekday.objects.get(day_of_week=6)

默认情况下,可空字段的选择小部件在呈现时会显示空选项。我怎样才能放弃这个选项并有一个默认值呢?

如果我设置了一个初始值,则默认情况下会在新表单上选择该值:

self.fields['start_weekday'].initial = Weekday.objects.get(day_of_week=6)

但仍列出空值。我尝试覆盖小部件选项:

self.fields['start_weekday'].widget.choices = [(wd.day_of_week, wd.name) for wd in Weekday.objects.all()]

但是现在默认情况下不选择星期日。我想也许我需要使用选项值作为初始值,但这也不起作用:

self.fields['start_weekday'].initial = Weekday.objects.get(day_of_week=6).pk

简而言之:如何删除可空模型字段中的空选项并选择默认值?

【问题讨论】:

    标签: django django-1.8


    【解决方案1】:

    ModelChoiceField中提供empty_label=None

    start_weekday = ModelChoiceField(Weekday.objects.filter(day_of_week=6), empty_label=None)
    

    您也可以分配 empty_label,而不是分配初始标签

    self.fields['start_weekday'].empty_label = None
    

    您也可以在模型中的字段中提供默认值

    start_weekday = models.CharField(max_length=10,choices=[(wd.day_of_week, wd.name) for wd in Weekday.objects.all()],default=6)
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 2010-12-24
      • 2012-01-26
      相关资源
      最近更新 更多