python – 自定义/删除Django选择框空白选项

我使用Django 1.0.2。我写了一个由Model支持的ModelForm。这个模型有一个ForeignKey,其中blank = False。当Django为此表单生成HTML时,它会为ForeignKey引用的表中的每一行创建一个带有一个选项的选择框。它还在列表顶部创建一个没有值的选项,并显示为一系列破折号:

<option value="">---------</option>

我想知道的是:

>从选择框中删除此自动生成的选项的最干净的方法是什么?
>什么是最干净的方式来定制它,使其显示为:

<option value="">Select Item</option>

在寻找一个解决方案我遇到了Django ticket 4653,这给了我的印象,其他人有同样的问题,Django的默认行为可能已被修改。这票是一年多,所以我希望可能有一个更清洁的方式来完成这些事情。

感谢任何帮助,

杰夫

编辑:我已经配置了ForeignKey字段:

verb = models.ForeignKey(Verb, blank=False, default=get_default_verb)

这设置了默认值,以便它不再是空/破折号选项,但不幸的是,它似乎无法解决我的任何问题。也就是说,空/破折号选项仍然出现在列表中。

最佳答案
没有测试这个,但基于阅读Django的代码herehere我相信它应该工作:

class ThingForm(models.ModelForm):
  class Meta:
    model = Thing

  def __init__(self, *args, **kwargs):
    super(ThingForm, self).__init__(*args, **kwargs)
    self.fields['verb'].empty_label = None

编辑:这是documented,虽然你不一定知道寻找ModelChoiceField如果你使用自动生成的ModelForm。

编辑:作为jlpp注释在他的答案,这是不完整的 – 你必须重新分配的选项到窗口小部件更改empty_label属性后。因为这有点怪,另一个可能更容易理解的选项是覆盖整个ModelChoiceField:

class ThingForm(models.ModelForm):
  verb = ModelChoiceField(Verb.objects.all(), empty_label=None)

  class Meta:
    model = Thing

转载注明原文:python – 自定义/删除Django选择框空白选项 - 代码日志