如何在Djang中实现EAV

2024-04-20 09:55:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要实现一个相当标准的实体属性值层次结构。有多种类型的设备,每种类型都有一组可以设置的设置,每个单独的设备对每个设置都有一组特定的值。似乎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 ...

我错过什么了吗?有更好的方法吗?这个行吗?在


Tags: thedjangonamemodelvaluedevicetypesetting
1条回答
网友
1楼 · 发布于 2024-04-20 09:55:14

我正试图回答,让我知道,我们是否在同一架飞机上。我想,你需要先制定EAV数据库scema。用于标识实体、属性和关联值。在这里,在你提到的例子中,实体可能是设备,它的属性可能是设置的。如果我们再举一个例子,比如在汽车销售中,实体是销售对象,属性是客户购买的产品(汽车),价值是价格、车型、汽车颜色等。 生成主表和存储映射的表(如果有)。 中的此架构实现模型.py将生成您的模型,并通过shell在这些模型中插入值,或插入脚本。在

相关问题 更多 >