【发布时间】:2017-03-18 20:23:35
【问题描述】:
我在我的网站上使用 Django,因此决定使用 Django Rest Framework 来构建我的 REST API。但是,我在加入表格时面临一个常见问题。如果连接是在直接外键上定义的,那么一切正常。但是,当在非直接外键字段上定义连接时,事情就会变得混乱。
例如,我将玩家的统计数据存储在一张表中。 (统计表有 1 个 fk -> player) 我将比赛的参与者存储在另一张桌子上(这张桌子有 2 个 fk -> 玩家,比赛)
如果我使用播放器元数据检索统计信息,一切正常。但我想检索给定比赛中所有玩家的统计数据。
在 SQL 中,我可以将参与者表与玩家 ID 上的 stats 表连接起来(常见的 fk,但就 Django 而言,两个表之间没有直接链接,即在 2 个表的各个模型上没有定义任何内容)然后过滤竞争。
select a.* from Stats a inner join Participants b on a.player = b.player where competition = '%s'
如何使用 Django 对象语法复制它?我想将其转换为:
Stats.objects.filter(stats__competition = %s)
到目前为止,我一直使用原始 SQL 作为解决方法。但是,我想转向更永久的解决方案。
有什么建议吗?如果迁移很简单并且这个连接问题很容易解决,我愿意迁移到不同的 REST 框架(远离 Django REST)。
编辑:添加简约模型:
class Stats(models.Model):
player = models.ForeignKey(Player, related_name='stats_player')
... (other fields)
class Participants(models.Model):
player = models.ForeignKey(Player, related_name='participant_player')
competition = models.ForeignKey(Competition, related_name='participant_competition')
【问题讨论】:
标签: django join django-rest-framework