Django查询过滤ManyToMany对象的数量

Kin*_*Guy 9 django many-to-many views count filter

我在ManyToMany关系中有两个模型(Event和UserProfile).我想只选择那些与其关联的用户数少于一定数量的事件.因此,应该选择迄今为止少于4人注册的活动.

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

proposed_event_list = Event.objects.all().filter(userprofile__lt=4)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

你能帮我吗?

Yuj*_*ita 13

Event.objects.annotate(c=Count('userprofile')).filter(c__lt=4)
Run Code Online (Sandbox Code Playgroud)

  • 高超!当然,我必须将“from django.db.models import Count”添加到 models.py 中,但这已经起作用了。Yuji,你是一个非常坚强和重要的公民。 (3认同)