在Django UserAdmin界面添加一列显示ForeignKey关系中的计数?

时间:2015-11-16 22:25:42

标签: django django-admin

我的Django管理员的每个用户都关联了许多个人资料。我想在User表中显示一列,其中包含与每个用户关联的Profiles数量。我怎么能这样做?

您可以在此处查看Profile模型的代码:http://codepad.org/9yLet9el

这是我尝试过的。 admin.py的相关部分是:

def profile_count(self, user):
    return user.profiles.count()

class MyUserAdmin(admin.ModelAdmin):
    list_display = UserAdmin.list_display + 'profile_count'

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

但由于某种原因,用户管理表保持不变。我究竟做错了什么?感谢。

2 个答案:

答案 0 :(得分:1)

您可以在list_display中添加callable。

https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

所以只需编写一个函数 - 给定User - 将返回配置文件的数量,例如:

def profile_count(user):
    return user.profiles.count()

class UserAdmin(admin.ModelAdmin):
    ...
    list_display = [..., profile_count]
    ...

或者,您可以尝试将'profiles.count'直接放入list_display,但我怀疑它是否有效。

答案 1 :(得分:-1)

我明白了。只需将其添加到admin.py

def profile_count(self, user):
    return user.profile_set.count()

UserAdmin.profile_count = profile_count
UserAdmin.list_display += ('profile_count',)