这是我的模型的简化版本(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 次查询
我知道我可以重新构建数据库来支持这一点,但我不想这样做。
最佳答案
最简单的方法是通过反向查询合并。
class Player(models.Model):
name = models.StringField()
def matches(self):
return self.player_1.all() | self.player_2.all()
关于python - Django:具有多个 fk 字段的 ManyToMany 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965701/