В админке Django, как фильтровать пользователей по группам? - PullRequest
6 голосов
/ 19 мая 2009

Это дает вам фильтр по статусу персонала и статусу суперпользователя, но как насчет групп?

Ответы [ 4 ]

12 голосов
/ 22 октября 2011

Начиная с версии 1.3 это можно сделать , используя это :

list_filter = ('groups__name')

Конечно, как объясняет @ S.Lott, вы должны зарегистрировать свой настроенный класс в файле 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)
5 голосов
/ 19 мая 2009

См. Настройка формы администратора в Django с одновременным использованием автообнаружения

По сути, вы определяете настроенный класс Admin с нужными вам функциями.

Затем отмените регистрацию и зарегистрируйте свой обновленный класс администратора.

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
4 голосов
/ 13 апреля 2013

Вот полный пример, который наследуется от SimpleListFilter, который доступен в Django 1.4 и выше.

https://docs.djangoproject.com/en/1.4/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)
0 голосов
/ 25 октября 2018

В более поздних версиях Django он работает точно так, как вы ожидаете:

list_filter = ('groups', )

Нет необходимости отменять регистрацию / регистрацию класса администратора.

...