以django格式显示全名,而不是用户名

以django格式显示全名,而不是用户名,django,django-forms,Django,Django Forms,我有一个Django应用程序,其中的活动和对象具有Django.contrib.auth.models中定义的用户对象的外键。这样做,我得到了用户的username属性,即登录id 既然User对象存储了全名,那么如何使表单上的ChoiceField显示用户的全名,而不是用户名,但在表单发布后仍将其链接回正确的用户对象?如果您有一个常规的ChoiceField,则不能绝对确定以下功能是否有效,但如果您有一个modelChoiceField,则可以执行以下操作: class UserModelCh

我有一个Django应用程序,其中的活动和对象具有Django.contrib.auth.models中定义的用户对象的外键。这样做,我得到了用户的
username
属性,即登录id


既然User对象存储了全名,那么如何使表单上的ChoiceField显示用户的全名,而不是用户名,但在表单发布后仍将其链接回正确的用户对象?

如果您有一个常规的ChoiceField,则不能绝对确定以下功能是否有效,但如果您有一个modelChoiceField,则可以执行以下操作:

class UserModelChoiceField(forms.ModelChoiceField):
    """
    Extend ModelChoiceField for users so that the choices are
    listed as 'first_name last_name (username)' instead of just
    'username'.

    """
    def label_from_instance(self, obj):
        return "%s (%s)" % (obj.get_full_name(), obj.username)


class XYZForm(forms.Form):
    ...
    xyz = UserModelChoiceField(User.objects.all())

要添加到上一个答案中,如果您试图在admin中修改表单,那么XYZForm类应该从forms.ModelForm继承,而在admin.py中,您应该创建一个表单属性为xyzorm的XYZAdmin类