我正在使用Django 1.0.2。我已经写了一个由模型支持的ModelForm。此模型具有一个ForeignKey,其中blank = False。当Django为该表单生成HTML时,它会创建一个选择框,其中对ForeignKey引用的表中的每一行都有一个选项。它还在列表顶部创建一个没有值的选项,并显示为一系列破折号:
<option value="">---------</option>
我想知道的是:
<option value="">Select Item</option>
在寻找解决方案时,我遇到了Django票证4653,给我的印象是其他人也有同样的问题,并且Django的默认行为可能已被修改。这张票已经使用了一年多,所以我希望可以有一种更清洁的方式来完成这些事情。
谢谢你的帮助,
杰夫
编辑:我已经配置了ForeignKey字段为:
verb = models.ForeignKey(Verb, blank=False, default=get_default_verb)
这确实设置了默认值,因此不再是空/破折号选项,但是不幸的是它似乎无法解决我的任何一个问题。即,空/破折号选项仍出现在列表中。
还没有测试过,但是基于在这里和这里阅读Django的代码,我相信它应该可以工作:
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
编辑:这已记录在案,尽管如果你正在使用自动生成的ModelForm,则不一定知道要查找ModelChoiceField。
编辑:正如jlpp在他的回答中指出的那样,这还不完整-更改empty_label属性后,你必须将选项重新分配给小部件。由于有点黑,所以可能更容易理解的另一个选项是覆盖整个ModelChoiceField:
class ThingForm(models.ModelForm): verb = ModelChoiceField(Verb.objects.all(), empty_label=None) class Meta: model = Thing