我有ModelForm
呈现select
字段,因为它指向ForeignKey
。呈现表单时,它会根据ForeignKey
的{{1}}定义显示选项。
例如,我在表单中有一个__unicode__
字段,用于从select
模型中选择联系人。 Contact
模型具有:
Contact
因此,我的def __unicode__(self):
return self.first_name
字段中的联系人列表仅显示名字。
我知道我可以更改select
定义,但我想知道如何根据__unicode__
字段的显示位置更改select
选项中显示的内容。换句话说,在某些形式中,我需要展示类似的东西:
select
在其他方面我只想展示:
{{ contact.first_name}} -- {{ contact.phone_number }}
如何调整{{ contact.first_name }}
以便那个特定字段,ModelForm
字段指向select
模型{{1} }显示联系人的全名?
答案 0 :(得分:4)
据我所知,这是ModelChoiceField
,因此您可以覆盖label_from_instance
。 Docs供参考。
class YouNewChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return "%s -- %s" % (obj.name, obj.phone_number)
在表单中使用您的新字段。
class YourForm(ModelForm)
# As you'd normally define your ModelChoiceField field
contact = YourNewChoiceField(queryset=...)
class Meta:
fields = ['contact', ...]