我有一个关于权限的问题。我想将通过国家/地区标记为员工(并可以进入管理页面)的用户分开。例如,来自荷兰的管理员只能查看和编辑来自荷兰的用户。这样做的最佳方法是什么?
我应该以某种方式进行查询,以便用户只能看到自己国家/地区的用户,而不是可以使用权限自定义用户?
我的models.py定义了一个国家/地区
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile', unique=True)
country = models.CharField("Country", max_length=150, blank=False)
我在admin.py
中想过这样的事情def queryset(self, request):
qs = super(ProfileAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(country=request.user.country)
答案 0 :(得分:0)
你正在思考正确的方向。这是过滤管理员可见对象的正确方法。
小修正:方法的名称为get_queryset()
,要访问用户的国家/地区,您应使用profile
关系:
def get_queryset(self, request):
qs = super(ProfileAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(country=request.user.profile.country)
更新:要过滤标准User
管理员中的用户,您必须将UserAdmin
替换为您自己的子类:
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
def get_queryset(self, request):
qs = super(MyUserAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(profile__country=request.user.profile.country)
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)