首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一组查询对象中获取所有的多个对象

问如何在一组查询对象中获取所有的多个对象
EN

Stack Overflow用户
提问于 2022-04-21 01:59:43
回答 1查看 262关注 0票数 1

我有一个模型Department,它有Roles,User是链接的。我了解用户,但需要获得user.role.department_set.all() (用户角色所属的所有部门),然后在每个部门中获取所有的role。

型号:

代码语言:javascript
复制
class User(AbtractUser):
    role = models.ForeignKey(Role)

class Role(models.Model):
    name = models.CharField()

class Department(models.Model):
    name = models.CharField()
    roles = models.ManyToManyField()

我如何获得包含用户角色的所有部门,然后得到所有这些部门的角色?

我目前正在做类似的事情,但这是一个非常昂贵的查找:

代码语言:javascript
复制
    def get_departments(self):
        """Returns a list of departments the user is in."""
        return self.role.department_set.all()

    def get_users_departments_roles(self):
        """Returns all the roles of all the departments the user is in."""
        departments = self.get_departments()
        roles = Role.objects.none()
        for department in departments.iterator():
            for role in department.roles.all():
                roles |= Role.objects.filter(name=role.name)
        return roles

附带问题:在输入所有这些内容之后,是否最好只向每个用户添加一个department字段?我担心的是,如果一个角色改变,我也会同时改变部门,这会增加复杂性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-21 02:20:19

您可以筛选角色查询集,并使用名称ManyToManyField department向后跟踪该角色之间的关系。

可以将查询集传递给__in筛选器以生成嵌套查询。

代码语言:javascript
复制
    def get_users_departments_roles(self):
        """Returns all the roles of all the departments the user is in."""
        departments = self.get_departments()
        return Role.objects.filter(department__in=departments).distinct()

但是请注意,某些数据库(MySQL)不能很好地执行嵌套查询,请参阅文档中本节末尾的这个警告

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71948078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档