这是我的模型的简化版本(如果需要的话,是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_1
或player_2
的所有比赛?具体来说,我想利用select_related()的优势在为每个玩家获得比赛时减少n + 1个查询
我知道我可以重新组织数据库以支持该操作,但是不希望这样做。
答案 0 :(得分:2)
最简单的方法是通过反向查询合并。
class Player(models.Model):
name = models.StringField()
def matches(self):
return self.player_1.all() | self.player_2.all()