Django 在 ManyToMany 计数上过滤模型,并使用特定于每个对象的限制?

标签 django django-models django-queryset

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/

相关文章:

Django : Count only non-empty CharField with annotate() & values()

django - 从具有不同数量值的列表中进行查询

javascript - 基于 Django 自定义页面的 CMS

django - 如何在 Python 模型迁移中生成基于函数的索引?

django - 在 ListView 中显示多个查询集

django - django 的 bulk_create 是原子的吗?

python - 如何检测模型属性是否是外键关系? (并检索所有 FK 模型对象)

django - 如何在 Django 中查询基于抽象类的对象?

django - 将具有相关对象的模型对象序列化为 JSON

javascript - Django - 查询集索引而不是循环