Django筛选ManyToMany计数模型?

假设我在models.py中有这样的东西:

class Hipster(models.Model): name = CharField(max_length=50) class Party(models.Model): organiser = models.ForeignKey() participants = models.ManyToManyField(Profile, related_name="participants") 

现在在我的views.py我想做一个查询,将获取一个派对超过0参与者的用户。

这样的事情可能是:

 user = Hipster.get(pk=1) hip_parties = Party.objects.filter(organiser=user, len(participants) > 0) 

做这件事的最好方法是什么?

如果这个工作,这是我将如何做到这一点。

最好的方式可能意味着很多的东西:最好的性能,最可维护的等等。所以我不会说这是最好的方法,但是我喜欢尽可能地坚持ORM特性,因为它看起来更容易维护。

 from django.db.models import Count user = Hipster.objects.get(pk=1) hip_parties = (Party.objects.annotate(num_participants=Count('participants')) .filter(organiser=user, num_participants__gt=0)) 
 Party.objects.filter(organizer=user, participants__isnull=False) Party.objects.filter(organizer=user, participants=None) 

exclude更容易:

 # organized by user and has more than 0 participants Party.objects.filter(organizer=user).exclude(participants=None) 

也返回不同的结果