创建Django“子管理员”以访问其公司用户的数据

创建Django“子管理员”以访问其公司用户的数据,django,Django,我正在构建一个Django应用程序,可供多家公司使用。现在我已经设置了commonsuper管理员,它可以查看每个用户和模型。我正在公司表上存储所有公司详细信息 假设我们有3个公司——A、B和C。我想为每个公司创建3个子管理员,他们只能查看/编辑与公司用户相关的所有数据 我已经尝试过了:我根据模型创建了权限,但它们并不能解决从唯一一家公司访问数据的目的 谁能向我解释一下这是如何实现的?以编程方式或从管理门户 技术规格: Django 2.1 Python 3.6.4 如果你需要更多的信息,请告诉

我正在构建一个Django应用程序,可供多家公司使用。现在我已经设置了commonsuper管理员,它可以查看每个用户和模型。我正在公司表上存储所有公司详细信息

假设我们有3个公司——A、B和C。我想为每个公司创建3个子管理员,他们只能查看/编辑与公司用户相关的所有数据

我已经尝试过了:我根据模型创建了权限,但它们并不能解决从唯一一家公司访问数据的目的

谁能向我解释一下这是如何实现的?以编程方式或从管理门户

技术规格:

Django 2.1

Python 3.6.4


如果你需要更多的信息,请告诉我。我会提供尽可能多的信息。谢谢。

如果您决定使用Django Admin,您可以覆盖每个ModelAdmin的get_queryset函数,只显示与当前登录用户公司相关的记录。例如:

class MyModelAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.filter(company=request.user.company)
请注意,这取决于您的用户是否具有company属性,并且您必须将其应用于ModelAdmin类的每个实例


官方文档中也描述了这一点:。

您可以通过在所有ModelAdmin类上重写queryset方法来实现这一点。但请记住,Django Admin并不是真正为最终用户所用的。可能是的,并非所有最终用户都将使用Admin。。。但A公司将有1名管理员负责A公司的用户,其他公司也是如此。此外,我无法从提供的URL中了解太多内容,如果您能对我的场景给出更多解释,那将非常有用!根据经验,为这些用例编写不同的应用程序通常更简单——正如voodoo burger提到的,admin实际上是一个内部管理工具,它基于crud的体系结构很少与业务领域的需求和工作流相匹配。它会覆盖现有的admin用户还是创建新类型的用户?因为我想要一个管理员,它的工作方式完全一样,现在。但更像是每家公司的版主,他们只能访问自己的数据,不能访问其他数据。@disp_name我认为你不太了解管理员和用户的工作方式。。你应该试着开始,然后当你陷入困境时回来问一些具体的问题。当然,我会调查一下,然后再回复。非常感谢您的帮助@voodoo burger