假设我的
models.py
有以下内容:
from django.db import models
class Department(models.model):
name = models.CharField(max_length=255)
class User(models.model):
name = models.CharField(max_length=255)
department = models.ForeignKey(
Department, related_name="department_users", on_delete=models.CASCADE
)
...
因此,我对用户查询集进行了大量复杂的过滤,以获取被视为“活跃”用户的子集,但现在我需要生成至少拥有一个“活跃”用户的部门列表。
我知道我可以使用反向查找,例如:
Department.objects.filter(department_users__name__contains=...)
等并再次进行过滤,但我想知道是否有一种方法可以直接从“活动”用户查询集中获取该信息。
我尝试使用
.values()
但这给了我一个字典查询集,我真的想要一个 django 模型查询集,这样我就可以对部门查询集进行进一步过滤。
你们知道有没有办法做到这一点?
如果您有
User
的查询集,您可以加载 user
并使用以下命令查询部门:
Department.objects.filter(department_users__in=list(queryset_of_users)).distinct()
您也可以在不具体化用户列表的情况下执行此操作:
Department.objects.filter(department_users__in=queryset_of_users).distinct()
这里您的
queryset_of_users
将是一个子查询,但这意味着数据库将完成第二次确定活动用户的工作。
.distinct()
子句将阻止返回 Department
,次数与该部门的 User
中的 queryset_of_users
数相同。