我有一个模型Department,它有Roles,User是链接的。我了解用户,但需要获得user.role.department_set.all() (用户角色所属的所有部门),然后在每个部门中获取所有的role。
型号:
class User(AbtractUser):
role = models.ForeignKey(Role)
class Role(models.Model):
name = models.CharField()
class Department(models.Model):
name = models.CharField()
roles = models.ManyToManyField()我如何获得包含用户角色的所有部门,然后得到所有这些部门的角色?
我目前正在做类似的事情,但这是一个非常昂贵的查找:
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字段?我担心的是,如果一个角色改变,我也会同时改变部门,这会增加复杂性。
发布于 2022-04-21 02:20:19
您可以筛选角色查询集,并使用名称ManyToManyField department向后跟踪该角色之间的关系。
可以将查询集传递给__in筛选器以生成嵌套查询。
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)不能很好地执行嵌套查询,请参阅文档中本节末尾的这个警告
https://stackoverflow.com/questions/71948078
复制相似问题