2010-02-02 32 views
3

是否可以在Django中實現'expando'模型,就像Google App Engine一樣?我在github上發現了一個名爲django-expando的django應用程序,但它仍處於早期階段。Django中的Expando模型

回答

2

這是可能的,但它會是一個史詩比例的混合物。 GAE使用被稱爲基於列的數據庫的不同數據庫設計,並且Django ORM被設計爲與關係數據庫鏈接。由於技術上GAE中的所有內容都存儲在一個沒有模式的非常大的表格中(這就是爲什麼GAE應用程序不需要使用syncdb),添加任意字段非常簡單。對於關係數據庫來說,每個表只能存儲一種數據(通常是)並且具有固定的模式,所以任意字段並不那麼容易。你可以實現這個

一個可能方式是創建expando屬性存儲表名,對象ID和醃製數據的文本字段一個新的模式或表,然後都爲Expando模型從子類繼承這會覆蓋__setattr____getattr__方法,該方法將自動在此表中創建一個新行。但是,這裏有幾個主要問題:

  • 首先,這是一個便宜的黑客攻擊,違背了關係數據庫的原則。
  • 其次,不可能在沒有更多黑客的情況下查詢這些expando字段,即使如此,它也會非常慢。

我的建議是找到一種方法來設計您的數據庫結構,以便您不需要expando模型。

+0

謝謝:) 我只是在探索expando模型。我認爲應用程序引擎補丁或appengine-helper對我來說是完美的。 – koko 2010-02-03 19:40:43