如何在Django中实现EAV
我需要实现一个相当标准的实体属性值层次结构。 有多种类型的设备,每种类型都有一系列的设置,每个设备都有一组特定的值。 似乎django-eav和eav-django包都不再维护,所以我想我需要自己推出。 但我如何设计这个? 到目前为止,我在想这样的事情(跳过很多细节)
class DeviceType(Model): name = CharField() class Device(Model): name = CharField() type = ForeignKey(DeviceType) class Setting(Model): name = CharField() type = CharField(choices=(('Number', 'int'), ('String', 'str'), ('Boolean', 'bool'))) device_type = ForeignKey(DeviceType) class Value(Model): device = ForeignKey(Device) setting = ForeignKey(Setting) value = CharField() def __setattr__(self, name, value): if name == 'value': ... do validation based on the setting type ... def __getattr__(self, name): if name == 'value': ... convert string to whatever is the correct value for the type ...
我错过了什么吗? 有没有更好的方法来做到这一点? 这会工作吗?
我想回答,让我知道,我们是在同一架飞机上。 我想,你需要先制定EAV数据库scema。 为了确定什么是实体,属性和相关的值。 在这里,在你提到的例子中,实体可能是设备,它的属性可能是设置。 如果我们举另外一个例子,比如在汽车销售的情况下,实体是销售收益者,属性是客户购买的产品(汽车),价值是价格,汽车模型,汽车颜色等。制作存储映射的主表格和表格任何。 models.py中的这个模式实现将使您的模型变为模型,并通过shell或插入脚本在这些模型中插入值。
链接地址: http://www.djcxy.com/p/25379.html