[英]django1.8 filter list_filter based on login
在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
關注文檔並在此處找到答案: [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,)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.