【问题标题】:How to implement EAV in Django如何在 Django 中实现 EAV
【发布时间】:2016-08-24 19:41:45
【问题描述】:

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

类设备类型(型号): 名称 = CharField() 类设备(型号): 名称 = CharField() 类型 = ForeignKey(DeviceType) 类设置(模型): 名称 = CharField() type = CharField(choices=(('Number', 'int'), ('String', 'str'), ('Boolean', 'bool'))) device_type = ForeignKey(DeviceType) 类值(模型): 设备=外键(设备) 设置=外键(设置) 值 = CharField() def __setattr__(self, name, value): 如果名称 == '值': ...根据设置类型进行验证... def __getattr__(自我,姓名): 如果名称 == '值': ...将字符串转换为该类型的正确值...

我错过了什么吗?有没有更好的方法来做到这一点?这行得通吗?

【问题讨论】:

    标签: python django entity-attribute-value


    【解决方案1】:

    这个问题很长一段时间都没有得到解答,与此同时情况发生了变化。特别是,叉子是由 django-eav 制成的。是Django EAV 2

    也许使用 EAV 模型的需要并不经常发生,因此找到这个存储库并不是立即的。

    我很抱歉没有对这个问题给出深入的回答,但我也刚刚开始使用这个库,所以我宁愿避免给出不准确的指示。

    但是,我相信此链接可以为任何需要它的人节省时间。

    【讨论】:

      【解决方案2】:

      我想回答,让我知道,不管我们在同一架飞机上。我认为,您需要先制定 EAV 数据库模式。为此确定什么是实体、属性和相关值。在这里,在您提到的示例中,实体可能是设备,它的属性可能是设置。如果我们再举个例子,比如汽车销售,实体是销售收据,属性是客户购买的产品(汽车),值是价格、车型、汽车颜色等。 制作主表和存储映射(如果有)的表。 models.py 中的这个模式实现将创建您的模型,并通过 shell 或插入脚本在这些模型中插入值。

      【讨论】:

      • 首先,您可能会注意到这个问题是在四月份提出的。我已经实现了我在问题中发布的代码版本。它对我来说工作得相当好,尽管我宁愿有一个更易于管理的解决方案。其次,您的回答非常笼统。你知道 Django 吗?
      • 你有没有使用过 django-eav ?过滤对我来说根本不起作用。
      • @iMitwe 不,当我寻找这个答案时,django-eav 几乎已经死了,所以我根据上面的代码推出了一个有限的版本。
      • 那么现在有办法在 Django 中定义一些 EAV 实现吗?
      猜你喜欢
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多