在设计具有虚拟字段的模型时,我想问一下最优雅的方法,如下面的Django ......
让's say we'重建一个在线商店,系统中的所有产品都由“产品”模型定义 .
class Product(models.Model):
# common fields that all products share
name = ...
brand = ...
price = ...
但是商店会有很多与彼此完全无关的产品类型,所以我需要一些方法来存储不同产品类型的虚拟领域(即MP3播放器的容量,书籍的页数,......) .
到目前为止,我可以提出我的原始Django技能的解决方案远非完美:
-
具有我手动管理的“custom_fields”属性和中间表 . (在我脸上尖叫丑陋:))
-
或者使用Python的危险exec-eval语句动态继承“Product”中的类(这对于维护和实现来说太多巫术魔法需要Django内部知识) .
你对此有何看法?
TIA .
4 回答
产品有特色 .
像那样 .
只是一系列功能 .
如果需要,可以在单独的表中拥有功能名称的主列表 . 不要过度分析功能 . 你不能对它们进行任何处理 . 你所做的就是呈现它们 .
Ruby on Rails有一个“序列化”字段,允许您将字典打包到文本字段中 . 也许DJango提供类似的东西?
This article具有SerializedDataField的实现 .
就个人而言,我会选择S. Lott的答案 . 但是,您可能想要创建自定义JSON字段:
http://svn.navi.cx/misc/trunk/djblets/djblets/util/fields.py
http://www.djangosnippets.org/snippets/377/
继承遗产 . 使用自己的附加字段创建Produce子类 .