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

时间:2009-07-06 06:10:07

标签: django django-forms

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

由于User对象存储全名,如何在表单上创建ChoiceField显示用户的全名,而不是用户名,但在表单发布后仍将其链接回正确的User对象? / p>

2 个答案:

答案 0 :(得分:14)

如果您有一个常规的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())

答案 1 :(得分:0)

要添加到上一个答案,如果您尝试修改管理员中的表单,那么XYZForm类应该从forms.ModelForm继承,并且在admin.py中,您应该创建一个表单属性= XYZForm的XYZAdmin类