首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为django中的多对多字段过滤多个值的模型结果

如何为django中的多对多字段过滤多个值的模型结果
EN

Stack Overflow用户
提问于 2012-02-23 17:52:58
回答 2查看 67.4K关注 0票数 42

我有以下型号:

代码语言:javascript
复制
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)

正如你所看到的,这个组是由玩家组成的。我想要做的是给两个球员,我希望能够过滤包含这两个球员的组,但我不确定如何做这种类型的查询。

EN

回答 2

Stack Overflow用户

发布于 2013-04-15 04:29:49

对您来说,最简单的解决方案是:

代码语言:javascript
复制
p1 = Player.objects.get(id=1)
p2 = Player.objects.get(id=2)
groups = Group.objects.filter(member=p1).filter(member=p2)

请注意,您不能像这样使用__in过滤器,因为这将导致OR并返回不包含两个播放器的组:

代码语言:javascript
复制
Group.objects.filter(member__in=[1, 2])
票数 25
EN

Stack Overflow用户

发布于 2017-09-01 03:33:05

对我来说,__in不起作用。我最终使用了complex Q lookup,它工作得很好,你可以用or过滤条件。像这样使用它:

代码语言:javascript
复制
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))
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9410647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档