Django在ManyToMany计数上过滤模型?

问题描述 投票:58回答:4

假设我的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)

这样做的最佳方式是什么?

django django-models django-queryset
4个回答
4
投票

使用exclude更容易:

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

也会返回不同的结果


1
投票

源自@ Yuji-'Tomita'-Tomita的回答,我还添加了.distinct('id')来排除duplitate记录:

Party.objects.filter(organizer=user, participants__isnull=False).distinct('id')

因此,每一方只列出一次。

© www.soinside.com 2019 - 2024. All rights reserved.