【问题标题】:django model design questionsdjango模型设计问题
【发布时间】:2026-02-23 23:55:01
【问题描述】:

我需要存储有关某些电影、书籍、游戏以及其他媒体的各种信息。从发行商开始到 DVD 盒中的光盘计数。一开始我想到了抽象的项目模型,有孩子的书,电影,游戏。但我认为,这一切都是硬编码的,而且可扩展性不强。如果我需要添加一些新的项目类型怎么办?

然后我在这里阅读了有关虚拟字段的信息 Django - designing models with virtual fields? 这引起了我的注意。但是看起来 DB 很重,搜索能力不强,我错了吗?

这种情况的最佳技术是什么?

【问题讨论】:

    标签: django model


    【解决方案1】:

    我认为你想要一个具体的 Item 超类(因为它可能有公共字段,即 title、copyright_date、publisher 等)和每个子类型的子类(如果你愿意,还可以有更多的子子类,即从 Toy 到带有 number_of_joints 字段的 ActionFigure),使用 multi-table inheritance

    如果您只是查询 Item 模型,这将很快,因为 Django 的 ORM 不会加入其他表(并且将返回 Item 对象,然后可以通过引用 item.subclassname 将其转换为它们的“本机”类型。同样,您可以高效地单独查询每个子类模型。

    关于可搜索性,如果您使用索引器,效率并不重要,因为索引很少发生。

    【讨论】: