如何使用Django中的外键关系中的任何/ exists / all逻辑检索查询集?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Django中的外键关系中的任何/ exists / all逻辑检索查询集?相关的知识,希望对你有一定的参考价值。
假设我有两个模型:
from django.db import models
class Parent(models.Model):
pass
class Child(models.Model):
parent = models.ForeignKey(Parent,
on_delete=models.CASCADE,
related_name='children')
active = models.BooleanField()
我如何获得至少有一个活跃孩子的父母查询集?换句话说,我如何获得排除那些没有活跃孩子的父母的查询集?如果在过滤器中使用模型属性是可行的,这将是一项微不足道的任务,但这是不可能的。这也是使用列表推导的简单操作,但重要的是查询集是最终结果。
答案
一种解决方案是使用聚合:https://docs.djangoproject.com/en/2.1/topics/db/aggregation/
我们可以使用它们拥有的活动子项数来注释父项的查询集,然后针对该查询集进行过滤,以仅查找数字大于或等于0的父项:
from django.db.models import Count, Q
num_active_children = Count('children', filter=Q(children__active=True))
parents_with_any_active_children = (Parent.objects
.annotate(num_active_children=num_active_children)
.filter(num_active_children__gte=1)
)
另一答案
Parent.objects.filter(child__active =真)
希望这对你来说已经足够了。
以上是关于如何使用Django中的外键关系中的任何/ exists / all逻辑检索查询集?的主要内容,如果未能解决你的问题,请参考以下文章