2015-11-05 80 views
0

假設您正在創建一個博客,並且每個博客帖子都包含一個交織文本片段和svg片段的數組(例如)。postgresql django:如何存儲變量類型的實例數組?

將每個片段存儲在自定義django字段中(例如HTMLFieldSVGField)。

組織這個最好的方法是什麼?

如何保持碎片的順序?此解決方案看起來很難看:

class Post(models.Model): 
    title = CharField(1000) 

class Fragment(models.Model): 
    index = IntegerField() 
    html = HTMLField() 
    svg = SVGField() 
    post = ForeignKey(Post) 
+0

創建一個單獨的模型來存儲這些模型。你不能依靠田地,因爲你聽到的聲音不知道有多少。 –

+0

@ShangWang我試圖使用一對多的關係,但如何維護片段的順序?只用整數字段? –

+0

你有多少種不同的類型?如果你沒有多少,你的方式很好,使用整數字段來存儲訂單。 –

回答

1

如上所述,單獨的模型是記錄所有片段的可行方法。我們使用一個IntegerField來記錄片段順序,以便稍後可以恢復整個Post

這裏一些注意事項:

  1. 使用order_bylatest或片n骰子操作排序/查找元素。
  2. 當需要插入/刪除操作時,它將打破整個序列。我們需要增加/減少多個元素來維護訂單。使用queryset和F()表達式一次更改多個記錄,如另一個SO post here中所述。

該方法存在一些不完善之處,但這是迄今爲止我可以提出的最佳解決方案(之前我遇到過類似的情況)。鏈接列表是一種好方法,但它不是數據庫友好的,因爲使用queryset獲取所有片段我們需要O(n)操作而不是O(1)。

相關問題