contrib.auth的admin.py定义了在管理界面为用户显示的字段:
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
我希望在这里看到每个用户的群组:
当您尝试添加“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,并检查管理员的更改,注意最后一栏:
答案 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不要覆盖原始模型的语句。
之后,只需导入自定义模型方法,该方法获取与用户关联的组并将其添加到管理类中。