Django员工用户管理仅创建的自己的用户

时间:2019-02-06 05:44:13

标签: python django django-admin

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

我该怎么做?我想我需要修改admin.py对吗?

我正在使用Django 1.11版

1 个答案:

答案 0 :(得分:0)

是的,您需要在admin.py中覆盖一些方法。需要执行以下操作。

  1. 更新用户模型以添加created_by字段
  2. 在管理员中覆盖保存方法以设置created_by字段
  3. 重写getqueryset方法可基于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()