在django 1.8中如何基于登录用户过滤list_filter?我不能使用django.contrib.admin中的SimpleListFilter,因为我使用django.contrib.admin.apps.SimpleAdminConfig使用AdminPlus注册视图。
我在ModelAdmin中尝试过的一些代码:
def get_list_filter(self, request):
my_list_filter = super(SubCategoryAdmin, self).get_list_filter(request)
if request.user.is_superuser:
pass
else:
my_list_filter = self.get_queryset(request)
return my_list_filter
def get_queryset(self, request):
'''
Superuser has all permissions.
'''
qs = super(SubCategoryAdmin, self).get_queryset(request)
if request.user.is_superuser:
pass
else:
qs = qs.filter(
category__in=Category.objects.filter(
department__in=Department.objects.filter(
name=request.user.customuser.department.name)))
return qs
答案 0 :(得分:-1)
关注文档并在此处找到答案:[https://docs.djangoproject.com/en/1.8/ref/contrib/admin/][1]
分享我的回答:
class UserCategoryListFilter(admin.SimpleListFilter):
# Human-readable title which will be displayed in the
# right admin sidebar just above the filter options.
title = _('Department',)
# Parameter for the filter that will be used in the URL query.
parameter_name = 'department'
def lookups(self, request, model_admin):
"""
Returns a list of tuples. The first element in each
tuple is the coded value for the option that will
appear in the URL query. The second element is the
human-readable name for the option that will appear
in the right sidebar.
"""
if not request.user.is_superuser:
return (
(request.user.customuser.department.name, _(request.user.customuser.department.name)),
)
def queryset(self, request, queryset):
"""
Returns the filtered queryset based on the value
provided in the query string and retrievable via
`self.value()`.
"""
# to decide how to filter the queryset.
if request.user.is_superuser:
if self.value() == request.user.customuser.department.name:
return queryset.filter(
department__in=Department.objects.filter(
name=request.user.customuser.department.name))
else:
return queryset
在modeladmin:
class CategoryAdmin(admin.ModelAdmin):
def changelist_view(self, request, extra_context=None):
extra_context = extra_context or {}
if request.user.is_superuser:
self.list_filter = ['department','name']
else:
self.list_filter = (UserCategoryListFilter,)