假设我的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查询集做进一步的过滤。
你们知道有没有办法做到这一点?
1条答案
按热度按时间to94eoyn1#
如果你有一个
User
s的查询集,你可以加载user
s并查询部门:你也可以这样做,而不具体化用户列表:
在这里,您的
queryset_of_users
将是一个子查询,但这意味着数据库将再次确定活动用户。.distinct()
子句将防止返回Department
的次数与该部门的queryset_of_users
中的User
相同。