[英]django1.8 filter list_filter based on login
In django 1.8 how to you filter the list_filter based on logged in user? 在django 1.8中,如何根据登录用户过滤list_filter? I cannot use SimpleListFilter from django.contrib.admin as I use django.contrib.admin.apps.SimpleAdminConfig to register a view using AdminPlus.
我无法使用django.contrib.admin中的SimpleListFilter,因为我使用django.contrib.admin.apps.SimpleAdminConfig使用AdminPlus注册视图。
Some code that I tried in the ModelAdmin: 我在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
Followed the docs and found the answer here: [https://docs.djangoproject.com/en/1.8/ref/contrib/admin/][1]
关注文档并在此处找到答案:
[https://docs.djangoproject.com/en/1.8/ref/contrib/admin/][1]
Sharing my answer: 分享我的答案:
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
In the modeladmin: 在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.