python-3.x - 如何使用 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
但上面的查询不加入。
解决方案
推荐阅读
- javascript - 如何在 Django 中从 JavaScript 加载静态文件?
- android - 在 6 个 Textureview 中播放 6 个视频
- java - 如何在 SpringBoot/MVC/Web 中将 HTML 日期转换为 ZonedDateTime?
- python - 尝试在 python 中构建折线图 - 使用基于一列的过滤器和线条的平均值
- php - 更新到版本 2 后作曲家给出错误
- javascript - 如何在字符串中创建标志数组?(JavaScript)
- jestjs - 带有打字稿测试文件的意外令牌'<'开玩笑和测试库/反应本机
- windows - 为什么关机弹窗的消息会被截断?
- java - ViewPagerAdapter 和 LiveData
- html - 在 Chrome 中打印 A4 大小的 HTML - 高度错误