如何在Django中实现EAV

Mad*_*bat 5 python django entity-attribute-value

我需要实现一个相当标准的实体-属性-值层次结构。有多种类型的设备,每种类型都有一堆可以设置的设置,每个单独的设备都有针对每个设置的一组特定值。看来django-eav和eav-django软件包都不再维护了,所以我想我需要自己动手。但是,我该如何设计呢?到目前为止,我在想这样的事情(跳过很多细节)

DeviceType(Model)类:
    名称= CharField()

类Device(Model):
    名称= CharField()
    类型= ForeignKey(DeviceType)

类设置(模型):
    名称= CharField()
    类型= CharField(choices =((('Number','int'),('String','str'),('Boolean','bool')))
    device_type = ForeignKey(设备类型)

类Value(Model):
    设备= ForeignKey(设备)
    设置= ForeignKey(设置)
    值= CharField()

    def __setattr __(自身,名称,值):
        如果名称=='值':
            ...根据设置类型进行验证...

    def __getattr __(自己,名字):
        如果名称=='值':
            ...将字符串转换为该类型的正确值...

我想念什么吗?有更好的方法吗?这样行吗?

pal*_*rni -1

我正在尝试回答,请告诉我,我们是否在同一架飞机上。我认为,你需要首先制定EAV数据库场景。为此,确定实体、属性和关联值是什么。在这里,在您提到的示例中,实体可能是设备,其属性可能是设置。如果我们再举个例子,比如说汽车销售,实体是销售收据,属性是客户购买的产品(汽车),值是价格、汽车型号、汽车颜色等。如果满足以下条件,则创建主表和存储映射的表任何。models.py 中的此架构实现将创建您的模型,并通过 shell 或插入脚本在这些模型中插入值。

  • 首先,您可能会注意到这个问题是在四月份提出的。此后,我实现了我在问题中发布的代码的一个版本。它对我来说效果相当好,尽管我宁愿有一个更易于管理的解决方案。其次,你的回答很笼统。你知道姜戈吗? (2认同)