Django filter the model on ManyToMany count?
我的问题与上面的问题非常类似,但区别在于:模型内部的多对多关系存在限制。
所以不是
class Party(models.Model):
organiser = models.ForeignKey()
participants = models.ManyToManyField('auth.User',
related_name="participants")
这将是
class Party(models.Model):
organiser = models.ForeignKey()
max_participants = models.PositiveIntegerField()
participants = models.ManyToManyField('auth.User',
related_name="participants")
所以我想找到参与者数量少于Party.max_participants
的所有Party对象。如何使用Django的ORM进行查询?
答案 0 :(得分:2)
首先我们使用参与者数量对每个Party
对象进行注释,然后我们执行.filter(..)
,其中max_participants
大于(__gt
),然后是参与者数量:< / p>
from django.db.models import Count, F
Party.objects.annotate(
num_participants=Count('participants')
).filter(
max_participants__gt=F('num_participants')
)
因此这里使用F(..)
-expression来引用我们定义的num_participants
注释,因此我们添加max_participants
列大于该数字的约束。