首页 > 解决方案 > 如何使用 django ORM 在外键字段上加入多个模型?

问题描述

想加入三个表并获取数据。其中model_c 和model_b 有一个指向model_a 的外键。但是所有模型都没有外键

class Model_A(models.Model):
    name = models.CharField()

class Model_B(models.Model):
    model_a = models.ForeignKey(Model_A)

    name = models.CharField()

class Model_C(models.Model):
    model_a = models.ForeignKey(Model_A)

    name = models.CharField()

想查询如下。

SELECT * FROM model_c JOIN model_a 
    ON model_a.id = model_c.model_a
    JOIN model_b ON model_a
    ON model_a.id = model_b.model_a;

尝试使用select_related创建查询但没有用。

query = Model_C.objects.select_related('model_a', 'model_a__model_b_set')

错误

FieldError 
Invalid field name(s) given in select_related: 'model_b_set'. Choices are: x, y

尝试使用prefetch_related创建查询但没有用。

query = Model_C.objects.select_related('model_a', 'model_a__model_b_set')
sql = Model_C.objects.select_related().prefetch_related('model_b').query

但上面的查询不加入。

标签: python-3.xdjangodjango-models

解决方案


推荐阅读