我想摆脱Django在模拟窗体上表示外键的选择输入中添加“-------------”选项
been answered您可以使用empty_label=none
选项,但我有一个ModelForm,而不是常规表单,并且不允许覆盖该字段。
我知道我可以覆盖ModelForm的__init__()
方法,以便使用
self.fields['my_foreign_key'].queryset = ....
但这真的很难看,因为这发生在“Main”模型上的+10个foreign_keys上,而且不仅仅是基于这个模型的Modelform
整个背景:
blank=True, unique=True
个选项,所以我可以为每个列表创建一个"---No information yet---"
记录,你打赌它有一个空白值而不是三个字母的代码...... 现在的情况是:我得到一个带有两个“空白值”选择的选择输入字段:django one和mine,一个接一个。 我在这里也错过了'empty_label = none`选项......
答案 0 :(得分:29)
如果您要删除所有ModelChoiceField
的空白选项,您可以执行类似..
class Form(forms.ModelForm):
class Meta:
model = MyModel
def __init__(self, *args, **kwargs):
super(Form, self).__init__(*args, **kwargs)
modelchoicefields = [field for field_name, field in self.fields.iteritems() if
isinstance(field, forms.ModelChoiceField)]
for field in modelchoicefield:
field.empty_label = None
但是这会取代所有ModelChoiceField
,所以也许更细粒度的东西:
for fieldname in ('field1','field2','field3','field4','field5','field6'):
self.fields[fieldname].empty_label = None
当然比你提到的__init__
覆盖更容易!
您可以使用2017+使用:
forms.ModelChoiceField(... empty_label=None