Django:具有多个fk字段的ManyToMany字段

时间:2019-03-03 04:59:01

标签: python django

这是我的模型的简化版本(如果需要的话,是Django 1.9):

class Player(models.Model):
    name = models.StringField()

class Match(models.Model):
    player_1 = models.ForeignKey(Player, related_name="player_1")
    player_2 = models.ForeignKey(Player, related_name="player_2")

有什么方法可以向模型中添加player.matches字段,从而查询玩家player_1player_2的所有比赛?具体来说,我想利用select_related()的优势在为每个玩家获得比赛时减少n + 1个查询

我知道我可以重新组织数据库以支持该操作,但是不希望这样做。

1 个答案:

答案 0 :(得分:2)

最简单的方法是通过反向查询合并。

class Player(models.Model):
    name = models.StringField()

    def matches(self):
        return self.player_1.all() | self.player_2.all()