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 进行该查询?
最佳答案
首先我们注释每个 Party
对象与参与者的数量,然后我们执行 .filter(..)
哪里max_participants
大于 ( __gt
) 那么参与者的数量:
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
列大于该数字。
关于Django 在 ManyToMany 计数上过滤模型,并使用特定于每个对象的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670575/