Django:从子查询集中获取父查询集

vawmfj5a  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(148)

假设我的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模型的查询集,这样我就可以对Department查询集做进一步的过滤。
你们知道有没有办法做到这一点?

to94eoyn

to94eoyn1#

如果你有一个User s的查询集,你可以加载user s并查询部门:

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的次数与该部门的queryset_of_users中的User相同。

相关问题