我有以下型号:
class Group(models.Model):
member = models.ManyToManyField(Player, through='GroupMember')
name = models.CharField(max_length=20, unique=True)
join_password = models.CharField(max_length=20)
date_created = datetime.datetime.now()
def __unicode__(self):
return str(self.name)
class GroupMember(models.Model):
member = models.ForeignKey(Player)
group = models.ForeignKey(Group)
rating = models.IntegerField(default=1500)
played = models.IntegerField(default=0)
wins = models.IntegerField(default=0)
losses = models.IntegerField(default=0)
experience = models.IntegerField(default=0)
admin = models.BooleanField(default=0)
正如你所看到的,这个组是由玩家组成的。我想要做的是给两个球员,我希望能够过滤包含这两个球员的组,但我不确定如何做这种类型的查询。
发布于 2013-04-15 04:29:49
对您来说,最简单的解决方案是:
p1 = Player.objects.get(id=1)
p2 = Player.objects.get(id=2)
groups = Group.objects.filter(member=p1).filter(member=p2)
请注意,您不能像这样使用__in过滤器,因为这将导致OR并返回不包含两个播放器的组:
Group.objects.filter(member__in=[1, 2])
发布于 2017-09-01 03:33:05
对我来说,__in
不起作用。我最终使用了complex Q lookup,它工作得很好,你可以用or
过滤条件。像这样使用它:
from django.db.models import Q
p1 = Player.objects.get(name='Player1')
p2 = Player.objects.get(name='Player2')
querySet = Group.objects.filter(Q(member=p1) | Q(member=p2))
https://stackoverflow.com/questions/9410647
复制相似问题