在Django admin中,如何按组过滤用户?

fykwrbwg  于 2023-06-25  发布在  Go
关注(0)|答案(4)|浏览(131)

它可以根据员工状态和超级用户状态进行过滤,但是组呢?

p1iqtdky

p1iqtdky1#

从版本1.3开始,可以使用以下命令完成:

list_filter = ('groups__name')

当然,正如@S.Lott所解释的,您必须在www.example.com文件中注册您的定制类admin.py:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    list_filter = UserAdmin.list_filter + ('groups__name',)

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

nwlqm0z12#

参见Customizing an Admin form in Django while also using autodiscover
实际上,您定义了一个具有所需特性的自定义Admin类。
然后注销并注册您修改后的管理员类。

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

ztmd8pv53#

下面是一个完整的例子,它继承自SimpleListFilter,它在Django 1.4及更高版本(截至2023年5月)中可用:
https://docs.djangoproject.com/en/4.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter
它支持设置所有可用的标签和参数来创建完全自定义的过滤器。
它在过滤器面板中显示为“按组”,并列出了所有可用的组。

from django.contrib.admin import SimpleListFilter
from django.contrib.auth.models import Group
from django.utils.translation import ugettext as _

class GroupListFilter(SimpleListFilter):
    title = _('group')
    parameter_name = 'group'

    def lookups(self, request, model_admin):
        items = ()
        for group in Group.objects.all():
            items += ((str(group.id), str(group.name),),)
        return items

    def queryset(self, request, queryset):
        group_id = request.GET.get(self.parameter_name, None)
        if group_id:
            return queryset.filter(groups=group_id)
        return queryset

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
    list_filter = UserAdmin.list_filter + (GroupListFilter,)

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

6jygbczu4#

在Django的后续版本中,它完全按照您的预期工作:

list_filter = ('groups', )

不需要注销/注册admin类。

相关问题