Django:如何使用活动用户和非活动用户的计数来注释查询集

时间:2016-01-16 21:52:26

标签: python django django-models django-admin

我想知道是否有办法在Django管理显示列表中添加两列,包括活跃用户数和非活跃用户数,如下所示:

class UserAdmin(django.contrib.admin.ModelAdmin):
list_display = ('name', 'num_active_user', 'num_non_active_user', )

def num_users(self, obj):
    return obj.num_users
num_users.short_description = "Number Of Users"
num_users.admin_order_field = 'num_users'

def get_queryset(self, request):
    qs = super(UserAdmin, self).get_queryset(request)
    return qs.annotate(num_users=Count('user', distinct=True))

有没有办法在这一行添加条件:

return qs.annotate(num_users=Count('user__is_active=True', distinct=True))

1 个答案:

答案 0 :(得分:0)

我使用以下技巧解决它:

return qs.annotate(nnum_active_users=django.db.models.Count(django.db.models.Case(django.db.models.When(
                                                                                            user__is_active=True, then=1, ))
                                                                      )
                           )