繁体   English   中英

Django:有关设计具有不同字段的模型的建议

[英]Django: Advice on designing a model with varying fields

我正在寻找有关在Django中创建动态排序模型的最佳方法的一些建议/意见。

该结构需要描述产品的数据。 大约有60个可能相关的不同数据点,每个产品根据其ProductType选择其中的20个点(重叠很多)。 大约有2种不同的ProductType,每种ProductType属于6个类别之一。

一种明显但不友好的方法是将所有100个数据点都放入Product模型中,然后进行选择,然后忽略任何保留为空的字段。 优点:很明显。 缺点:这很丑陋,如果我需要添加更多数据点,则需要更新数据库。

我的想法是使每个产品完全抽象,仅定义其产品类型以及其他一些识别特征。

class Product(models.Model):
    productType = models.ForeignKey(ProductType)

然后,对于每种数据点(数字,文本,日期等),我将有一个单独的模型,如下所示:

class TextData(models.Model):
    fieldName = models.CharField(etc)
    verboseName = models.CharField(etc)
    data = models.CharField(etc)
    product = models.ForeignKey(Product)

最后,我将建立一个模型,定义与每种产品类型相关的数据类型以及应调用的每个数据点。

class ProductType(models.Model):
    name = models.CharField(etc)
    ....

因此,主要的问题是:当产品类型相关字段可以变化时,最好的方法是什么? 也许另一个拥有数据点名称/类型的模型,以及在ProductType和该模型之间的ManyToManyField? 使用XML的文本字段? 定义结构的外部XML字段? 放弃整个追求,选择更好的东西吗?

谢谢你的帮助!

如果您正在以某种eav样式在django中寻找模型的动态属性的实现,请查看eav-djangodjango-expando

这是普通的关系数据库设计。 不要使用OO和继承技术对其进行过度优化。

您有一个“产品类别”表,其中仅包含名称。

您有一个“产品类型”表,其中没有多少信息与FK一起分类。

您有一个与产品类型有FK关系的产品表。

您有一个包含产品数据点和产品FK的产品功能表。

要使用产品,请查询产品。 如果您需要这些功能,则只需使用“ feature_set”即可。 Django为您获取它们。

这非常有效,并且是关系数据库和ORM层的既定功能。 数据库缓存和ORM缓存使这些查询的执行非常迅速。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM