Это дает вам фильтр по статусу персонала и статусу суперпользователя, но как насчет групп?
В администраторе Django, как фильтровать пользователей по группам?
Ответы (4)
Начиная с версии 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)
list_filter = ('groups',)
- person laltin; 07.12.2015
См. Настройка формы администратора в Django с использованием автообнаружения< /а>
По сути, вы определяете настраиваемый класс администратора с нужными вам функциями.
Затем отмените регистрацию и зарегистрируйте свой пересмотренный класс администратора.
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)
Вот полный пример, который наследуется от 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)
В более поздних версиях Django он работает именно так, как вы ожидаете:
list_filter = ('groups', )
Нет необходимости отменять регистрацию/регистрацию класса администратора.
django.contrib.auth
, поэтому хорошее место для этого переопределения — admin.py пользовательской модели пользователя.
- person shacker; 28.05.2019