1

在我的 Django 应用程序中,用户可以注册到站点并从管理员那里获得 staff_user 权限。之后,员工用户可以使用默认的 django 管理站点创建和管理一些其他用户(普通用户)。现在,我想让员工用户只看到和管理他从管理站点创建的用户,我不希望他看到其他员工用户创建的其他用户。

我怎样才能做到这一点?我想我需要修改 admin.py 对吗?

我正在使用 django 版本 1.11

4

1 回答 1

1

是的,您需要覆盖 admin.py 中的一些方法。需要应用以下内容。

  1. 更新用户模型以添加 created_by 字段
  2. 覆盖管理员中的保存方法以设置 created_by 字段
  3. 覆盖 get queryset 方法以根据 created_by 过滤用户列表。

    class ProfileAdmin(admin.ModelAdmin):
        list_display = ("username",)
        model = Profile
    
    
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            if request.user.is_superuser:
                return qs
    
            return Profile.objects.filter(created_by=request.user) or qs.none()
    
    
    
        def save_model(self, request, obj, form, change):
            if change:
                obj.modified_by = request.user
            else:
                obj.created_by = request.user
    
            obj.save()
    
于 2019-02-06T06:01:48.600 回答