【发布时间】:2013-11-30 02:48:54
【问题描述】:
最近我有一个关于模型继承的 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")
基本上,当我获得所有项目的索引视图时,Unit 的每个子项都需要另一个左外连接。
假设我最多有 5 个 Unit 的孩子,并且数据库中最多有 200 个项目,这会破坏交易吗?我总是可以缓存索引视图,是吗?还是我错过了 MTI 的另一个问题? “2 Scoops of Django”一书绝对反对使用多表继承……甚至说“永远不要这样做”。但我觉得它解决了我的问题,很容易理解,考虑到 Django 处理关系的方式,它几乎是一个必要的邪恶。
保留我所拥有的还是回到绘图板上?
【问题讨论】:
-
你能扩展你的问题吗?我知道您有问题,但我无法建议其他解决方案,因为我没有看到问题,只有您的解决方案。