Django - 在用户配置文件管理中显示用户电子邮件

Django - Display User Email in User Profile Admin

这可能是一个很简单的问题,但我一直没能在SO中找到它。

我通过 OnetoOneField 创建了一个用于附加用户信息的用户配置文件模型。现在对于用户配置文件模型的管理员,我想显示在用户模型中找到的电子邮件字段。我试过了:

# models.py
def email(self):
    return self.user.email

# admin.py 
fieldsets = [
    ('',    {'fields': [
        ...
        'email',
        ...
    ]})
]
list_display = (
    ...
    'email',
    ...
)

这适用于 list_display 部分,但对于 fieldsets,弹出以下错误:

Unknown field(s) (email) specified for UserProfile. Check fields/fieldsets/exclude attributes of class UserProfileAdmin.

有办法解决这个问题吗?提前致谢!

来自documentation

fields can contain values defined in readonly_fields to be displayed as read-only.

If you add the name of a callable to fields, the same rule applies as with the fields option: the callable must be listed in readonly_fields.

所以你需要添加:

readonly_fields = ('email',)

给您的模型管理员 class,然后它将在字段集中可用。

把这个

def email(self, obj):
    return obj.user.email

在您的管理员 class 用户配置文件中,您将能够在字段集中使用它。