DJANGO:从子查询集中获取父查询集
DJANGO: Get a parent queryset from a child queryset
假设我的 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(<strong>department_users__in=list(</strong><i>queryset_of_users</i><strong>)</strong>).distinct()
您也可以在不具体化用户列表的情况下执行此操作:
Department.objects.filter(<strong>department_users__in=<i>queryset_of_users</i></strong>).distinct()
此处您的 queryset_of_users
将是一个子查询,但这意味着数据库将进行第二次确定活动用户的工作。
.distinct()
子句将阻止返回 Department
的次数与该部门的 queryset_of_users
中的 User
次数相同。
假设我的 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(<strong>department_users__in=list(</strong><i>queryset_of_users</i><strong>)</strong>).distinct()
您也可以在不具体化用户列表的情况下执行此操作:
Department.objects.filter(<strong>department_users__in=<i>queryset_of_users</i></strong>).distinct()
此处您的 queryset_of_users
将是一个子查询,但这意味着数据库将进行第二次确定活动用户的工作。
.distinct()
子句将阻止返回 Department
的次数与该部门的 queryset_of_users
中的 User
次数相同。