Django选择字段 - 更改显示的内容

时间:2016-07-24 02:38:38

标签: django django-forms

我有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} }显示联系人的全名?

1 个答案:

答案 0 :(得分:4)

据我所知,这是ModelChoiceField,因此您可以覆盖label_from_instanceDocs供参考。

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', ...]