如何在Django中的多对多字段中为多个值过滤模型结果 [英] How to filter model results for multiple values for a many to many field in django

查看:493
本文介绍了如何在Django中的多对多字段中为多个值过滤模型结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下模型:

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)

您可以看到该小组由玩家成员组成。我想给两个参与者一个我希望能够过滤包含这两个参与者的组,但是我不确定如何进行这种查询。

As you can see the group is made up of members who are players. What I would like to do is given two players I would like to be able to filter the groups that contain both of these players but I am unsure how to do this type of query.

推荐答案

如果您的 Player 模型如下所示:

If your Player model looks like this:

class Player(models.Model):
    name = models.CharField(max_length=200)

然后,您可以执行以下查询:

Then, you can execute this query:

Group.objects.filter(player__name__in=['Player1','Player2'])

将其大致翻译为拥有名称与 Player1和 Player2匹配的玩家

或者您可以获取玩家单独的对象

Or you can fetch the player objects individually:

p1 = Player.objects.get(name='Player1')
p2 = Player.objects.get(name='Player2')
groups = Group.objects.filter(player=p1).filter(player=p2)

这篇关于如何在Django中的多对多字段中为多个值过滤模型结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆