我需要存储有关某些电影,书籍,游戏以及其他媒体的各种信息。从发行者到DVD盒的光盘数量。起初我想到了抽象物品模型,有儿童书,电影,游戏。但我认为,这些都是硬编码的,而且不是很可扩展。如果我需要添加一些新的项目类型怎么办?
然后我在这里阅读了虚拟字段 Django - designing models with virtual fields? 这引起了我的注意。但看起来DB很重,不太可搜索,我错了吗?
此类案件的最佳技巧是什么?
答案 0 :(得分:1)
我认为你想要一个具体的Item超类(因为它可能有共同的字段,即title,copyright_date,publisher等)和每个子类的子类(如果你愿意,还有其他子子类,即从玩具到ActionFigure with number_of_joints field),使用multi-table inheritance。
如果您只是查询Item模型,这将是快速的,因为Django的ORM将不会连接到其他表(并将返回Item对象,然后可以通过引用item.subclassname将其转换为其“本机”类型。同样,您可以单独查询每个子类模型。
关于可搜索性,如果使用索引器效率并不重要,因为索引很少发生。