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

问题描述 投票:0回答:1

假设我的

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 模型查询集,这样我就可以对部门查询集进行进一步过滤。

你们知道有没有办法做到这一点?

django django-models django-rest-framework django-queryset django-filter
1个回答
3
投票

如果您有

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
数相同。

© www.soinside.com 2019 - 2024. All rights reserved.