我有一个应用' app_name'它有一个配置文件对象,通过OneToOne字段方式链接到User对象。现在登录时,我使用他的个人资料对象ID将用户重定向到管理网站上的编辑个人资料页面。我已按预期授予is_staff访问权限和编辑配置文件的权限。
现在我不想阻止他访问其他个人资料对象。我现在有两种方式,我可以这么认为 - 1.制作一个自定义权限,授予只有登录用户的个人资料的编辑权限。 2.阻止不涉及个人资料对象ID的网址。
超级用户应该能够正常访问,因为它是默认可用的。
我不知道如何执行其中一种方式。任何其他可能的方式都受到欢迎。请帮忙!
答案 0 :(得分:0)
覆盖ModelAdmin.get_queryset()
可以排除其他对象:
class ProfileAdmin(ModelAdmin):
# current user can only see his profile
def get_queryset(self, request):
qs = super(ProfileAdmin, self).get_queryset(request)
if not request.user.is_superuser:
qs = qs.filter(id=request.user.id)
return qs
如果您只想控制更改权限,请覆盖ModelAdmin.has_change_permission():
class ProfileAdmin(ModelAdmin):
# current user can only edit his profile
def has_change_permission(self, request, obj=None):
# user has permission to edit a obj
if not obj or request.user.is_superuser:
return True
# user ONLY has permission to edit his obj
return request.user.id == obj.user.id