2009-07-24 106 views
1

我是python/django的新手。我需要在django模型中存儲任意數量的字段。我想知道,如果Django有什麼照顧這個。如何在django模型中存儲任意數量的字段?

通常,我會在一列中存儲一些XML來執行此操作。 django是否提供了一些類,使它易於執行,無論是XML還是其他(更好的)方法?

感謝, 皮特

+0

也值得注意的是,將來我們可能會選擇在Django中使用NoSQL適配器。 Google已經在appengine上添加了BigTable支持,並且在CouchDB適配器上完成了一些早期工作。 – sixthgear 2009-07-24 16:34:25

回答

11

有很多的解決這個問題的方法,並根據您的情況其中的任何可能的工作。您當然可以使用TextField來存儲XML或JSON或任何其他形式的文本。結合Python的pickle功能,你可以做一些整潔的東西。

你可以看看上DjangoSnippets Django的泡椒域定義: http://www.djangosnippets.org/snippets/513/

這讓你傾倒Python字典進入領域和做一些操作,這樣當你引用這些字段,你可以方便地訪問字典而不需要重新解析XML或任何東西。

我想你也可以探討編寫一個自定義字段定義,它會爲其他序列化格式做類似的事情,雖然我不知道這將是多麼有用。

或者您可以簡單地重構您的模型以利用ManyToMany字段。您可以爲通用鍵和值對創建模型,然後在您的主模型中,您將擁有對該通用鍵和值模型的M2M引用。這樣,你就可以利用更多的Django的ORM的引用數據等

+0

提供很多選項的很好的答案,謝謝! – slypete 2009-07-24 16:08:54

0

有可用的XML領域: http://docs.djangoproject.com/en/dev/ref/models/fields/#xmlfield

但它會迫使你做的結果查詢額外的解析。 (我認爲你必須在某種程度上做...)

我已經考慮只是傾倒一個列表,unicode(mycolumnlist),到一個單一的字段字段,只有一定數量的索引charfields像後:

class DumbFlexModel(models.Model): 
    available_fields = models.CharField() 
    field1 = models.CharField() 
    field2 = models.CharField() 
    field3 = models.CharField() 
    ... 

這樣,你至少可以執行包含available_fields查詢結果進行篩選,只有那些你試圖獲得vaules領域,但隨後的位置是任意的,所以你仍然必須通過每個結果和過程available_fields得到價值的位置。

或者可能傾銷序列化(pickle.dumps())字典的列表?

我對其他建議感興趣。

相關問題