在管理界面中显示用户组?

时间:2015-07-02 21:30:13

标签: python django

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

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')

我希望在这里看到每个用户的群组:

enter image description here

当您尝试添加“group”字段时,仅为测试目的而失败:

list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'group')

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

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

那么,怎么做呢?

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

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

在list_display之前添加这个寻找组的def:

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')

然后是syncdb,并检查管理员的更改,注意最后一栏:

enter image description here

2 个答案:

答案 0 :(得分:3)

默认情况下,由于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

您可以对其进行测试并organize the code to your convenience

答案 1 :(得分:0)

阅读ManyToMany fields in admin list_display后,如果不添加自定义模型方法,似乎不可能。

尽管如此,看起来adding custom methods to built-in Django models是可能的,如果您这样做:

from django.contrib.auth.models import User

class UserMethods(User):
  def custom_method(self):
    pass
  class Meta:
    proxy=True

proxy=True是告诉django不要覆盖原始模型的语句。

之后,只需导入自定义模型方法,该方法获取与用户关联的组并将其添加到管理类中。