在管理界面显示用户组?

jai*_*ano 7 python django

contrib.auth 中的 admin.py 定义了在管理界面为用户显示的字段:

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
Run Code Online (Sandbox Code Playgroud)

我想在这里看到每个用户的组:

在此处输入图片说明

仅用于测试目的,当您尝试添加“组”字段时,它会失败:

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'group')
Run Code Online (Sandbox Code Playgroud)

出现此错误: : (admin.E109) 'list_display[5]' 的值不能是 ManyToManyField。

搜索后,我只找到了将应用程序添加到管理界面或创建自定义用户模型的方法,但我想我错过了一些东西。

那么,该怎么做呢?

已解决--- 感谢@{Alexis No} 的回答

编辑 /usr/local/lib/pyton2.7/dist-packages/django/contrib/auth/admin.py

就在 list_display 之前添加这个寻找组的定义:

def group(self, user):
    groups = []
    for group in user.groups.all():
        groups.append(group.name)
    return ' '.join(groups)
group.short_description = 'Groups'

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'group')
Run Code Online (Sandbox Code Playgroud)

然后同步数据库,并在 admin 检查更改,注意最后一列:

在此处输入图片说明

Ale*_*N-o 7

由于 ManyToMany 关系,默认情况下这是不可能的,但这应该有效:

def group(self, user):
    groups = []
    for group in user.groups.all():
        groups.append(group.name)
    return ' '.join(groups)
group.short_description = 'Groups'

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'group')
# The last argument will display a column with the result of the "group" method defined above
Run Code Online (Sandbox Code Playgroud)

您可以测试它并根据您的方便组织代码