簡體   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