gpt4 book ai didi

Django 多表继承和左外连接

转载 作者:行者123 更新时间:2023-12-01 15:50:07 25 4
gpt4 key购买 nike

最近我有一个关于模型继承的 Django 常见问题。我有一堆不同的模型,我想单独或作为一个组展示。读作:查询数据库中的所有内容,或者只是某个类别(模型)的项目。

最终,我选择了多表继承。我的模型看起来像:

class Unit(models.Model):
etc, etc...

class Child1(Unit):
etc, etc...

class Child2(Unit):
etc, etc...

因此,现在我可以查询单位以获取所有内容,并查询单个子项以获取更具体的信息。它工作正常,但我只是查看了为所有单元列表生成的 SQL……它变得非常丑陋!
SELECT "all the fields from all the tables (Unit and Children)" 
FROM "Unit"
LEFT OUTER JOIN "Child1" ON ("whatever")
LEFT OUTER JOIN "Child2" ON ("whatever")
LEFT OUTER JOIN "Child3" ON ("whatever")
LEFT OUTER JOIN "Child4" ON ("whatever")
LEFT OUTER JOIN "Child5" ON ("whatever")

基本上,当我获得所有项目的索引 View 时,Unit 的每个 child 都需要另一个左外连接。

假设我最多有 5 个 Unit 的 child ,并且数据库中最多有 200 个项目,这会破坏交易吗?我总是可以缓存索引 View ,是吗?还是我错过了 MTI 的另一个问题? “2 Scoops of Django”一书绝对反对使用多表继承……甚至说“永远不要这样做”。但我觉得它解决了我的问题,很容易理解,考虑到 Django 处理关系的方式,它几乎是一个必要的邪恶。

保留我所拥有的还是回到绘图板上?

最佳答案

如果您的问题是加载不需要的数据,您可以使用 only method仅从数据库中检索您需要的数据。

如果问题在某种程度上是这种形式:

You have one model that always have values in, but it can have a couple of different "profiles" that might or might not be filled in.



我认为你的状态很好,我的意思是,另一种选择是让一切都成为 null可以,这不是很好,或者使用 ForeignKeys,这将导致相同类型的查询。我唯一要注意的是,只有当模型继承对您正在使用的实体有意义时,您才应该使用模型继承,否则您可以使用 OneToOne field (这只是在概念上,因为继承在后台使用 OneToOne 字段)

关于Django 多表继承和左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com