如何使用django ORM在外键字段上连接两个表? [英] How do you join two tables on a foreign key field using django ORM?

查看:1581
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆