如何使用django ORM在外键字段上连接两个表? [英] How do you join two tables on a foreign key field using django ORM?
问题描述
让我们假设我有以下模型:
Let's assume I have the following models:
class Position(models.Model):
name = models.CharField()
class PositionStats(models.Model):
position = models.ForeignKey(Position)
averageYards = models.CharField()
averageCatches = models.CharField()
class PlayerStats(models.Model):
player = models.ForeignKey(Player)
averageYards = models.CharField()
averageCatches = models.CharField()
class Player(models.Model):
name = models.CharField()
position = models.ForeignKey(Position)
我想使用django的ORM执行等效的SQL查询:
I want to perform the equivalent SQL query using django's ORM:
SELECT *
FROM PlayerStats
JOIN Player ON player
JOIN PositionStats ON PositionStats.position = Player.position
我如何使用django的ORM?查询不完全正确,但想法是我想要一个查询,使用django的ORM,给我 PlayerStats
加入 PositionStats
根据玩家的位置。
How would I do that with django's ORM? The query isn't exactly correct, but the idea is that I want a single query, using django's ORM, that gives me PlayerStats
joined with PositionStats
based on the player's position.
推荐答案
这不是一个查询,这对每个涉及的表执行一次查询,并在Python中连接它们。有关 prefetch_related
的详情: https ://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related
It isn't one query, but it's pretty efficient. This does one query for each table involved, and joins them in Python. More on prefetch_related
here: https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related
Player.objects.filter(name="Bob").prefetch_related(
'position__positionstats_set', 'playerstats_set')
这篇关于如何使用django ORM在外键字段上连接两个表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!