Django查询过滤ManyToMany对象的数量

时间:2012-08-23 23:28:13

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

我在ManyToMany关系中有两个模型(Event和UserProfile)。我想只选择那些与其关联的用户数少于一定数量的事件。因此,应该选择到目前为止注册人数少于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)

我想我没有正确地过滤每个事件的所有Userprofiles,但我不知道该怎么做。

你能帮忙吗?

1 个答案:

答案 0 :(得分:13)

Event.objects.annotate(c=Count('userprofile')).filter(c__lt=4)