2011-10-08 74 views
1

我在數據庫結構中有很多一對多的關係。例如,你有一個用戶,用戶有很多學位,他有很多電子郵件,他有很多合同等。Django:一對多查詢

我在Django的查詢集中發現了這個「select-related()」特性,它看起來很棒。然而,它不會「倒退」,它只適用於你開始使用的表的所有其他表的外鍵,但如果它是一對多,你不會將所有的外鍵存儲在用戶表。

所以我的問題是,是否有某種方式,我可以,

  1. 打一次數據庫
  2. 依然能夠使用Django的不錯的面向對象的模型,非常類似,user.degree [ 0] .school_name - 這會很棒。

任何幫助將不勝感激!!

編輯1:嗯其實我只是意識到,從技術上說,用戶表不包含任何字段名稱度。您知道學位與用戶關聯的唯一方法是通過學位表並查找用戶外鍵。所以在某種程度上,這就像一個數據庫視圖的排序...

編輯2:我想你可以在數據庫中創建一個視圖,有很多JOIN,並在Django中創建一個模型來鏡像該視圖?只是要弄清楚所有不同的數據庫如何處理視圖上的INSERT/UPDATE/DELETE ...不知道是否有列表,我現在使用postgresql。

回答

0

您應該看看django-unjoinify,它允許您使用自己的自定義優化SQL,並允許您將結果映射到特定模型。

如果你把創建數據庫視圖的路線,(我創造了許多自己,我認爲這是一個好主意。)你應該重寫模式的save()delete()update()和類似的方法實際寫入各自的表格。

這確實是一個經典的數據庫智慧,「爲所需的所有內容啓動一個查詢,而不是每個記錄一個查詢」。上述兩種方法都有助於實現它。

+0

重寫默認數據庫函數的重要建議。我想我寧願使用像數據庫視圖這樣的標準,而不是使用附加組件。 – reedvoid