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

标签 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 次查询

我知道我可以重新构建数据库来支持这一点,但我不想这样做。

最佳答案

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

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/

相关文章:

python - 如何根据 pep8 在 Python 中的函数定义中换行?

javascript - Python 获取具有 javascript 的网页内容 - 也许是 Selenium

python - Django Apache wsgi 更改 python 版本

django - Heroku:我的 Django 应用程序出现应用程序错误 H14: "No Web Processes Running"

Django List 删除当前对象将被删除的对象

python - 如何在纯python中的Windows上获取父 shell 的路径?

python - SQlite:保存/注册子查询以供重复使用

django - Python opencv等待相机空闲

Python Tkinter 计算器不会计算输入小部件中的文本

python - uwsgi 容器中的 Google StackDriver 日志级别始终处于错误级别