【问题标题】:Django query filter by number of ManyToMany objectsDjango查询按ManyToMany对象的数量过滤
【发布时间】:2012-08-19 13:02:39
【问题描述】:

我在多对多关系中有两个模型(事件和用户配置文件)。我只想选择那些关联的用户数量少于一定数量的事件。因此,应选择迄今为止注册人数少于 4 人的活动。

在views.py中我有这样的东西,但它不起作用:

proposed_event_list = Event.objects.all().filter(userprofile__lt=4)

models.py 的相关部分如下所示:

class Event(models.Model):
    name = models.CharField(max_length=100)
    date = models.DateTimeField('Event date')

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    event_commitments = models.ManyToManyField(Event, null=True, blank=True)

我想我没有正确过滤每个事件的所有用户配置文件,但我不知道该怎么做。

你能帮忙吗?

【问题讨论】:

  • 请查看文档或谷歌以了解 ORM 的注释和聚合,应该可以帮助您入门。
  • 我已经完成了。我正在寻找更具体的建议。给出的标准过滤器似乎是根据单个相关模型对象的特定属性而不是一组对象进行过滤。我想我正在寻找看起来更深奥的信息。
  • 呃,看了下面裕二的建议,我意识到我没有仔细研究你说的话。感谢您的建议!

标签: django filter count views many-to-many


【解决方案1】:
Event.objects.annotate(c=Count('userprofile')).filter(c__lt=4)

【讨论】:

  • 太棒了!当然,我必须将from django.db.models import Count 添加到models.py,但这已经奏效了。 Yuji,你是一个非常强大和重要的公民。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
相关资源
最近更新 更多