2012-03-07 21 views
0

我已經得到了我需要加入那些非關係型(無外鍵)2個現有的模型。這些是由其他開發者編寫的,不能被我修改。如何加入在Django 1.3非關係模型上2場

這裏是他們的簡單描述:

模型來處理

  • 字段名
  • 田間小路
  • 場somethingelse
  • 場酒吧

模型服務

  • 字段名
  • 田間小路
  • 現場服務名
  • 場富

我需要加入這兩種模式的所有實例的文件名和路徑列。在這個連接發生之前,我必須應用現有的過濾器。

實施例:

A = Process.objects.filter(somethingelse = 231)

B = Service.objects.filter(富= 'ABC')

結果= A.filter(文件名= B.filename,路徑= B.path)

回答

1

這很爛,但你最好的選擇是一個迭代類型的所有型號,併發出查詢,讓您的連接模型爲其他類型。

另一種方法是運行原始SQL查詢來執行這些連接,並檢索的ID對於每個模型對象,然後檢索每個接合對基於這一點。運行時效率更高,但是如果您的模式發展,則需要手動維護。

+0

爲什麼會這樣在Django複雜,當我可以寫一個簡單的Postgres的查詢做呢? – user451500 2012-03-07 21:19:07

+0

@ user451500這在django中很複雜,因爲你沒有告訴django你的數據之間的這種關係;同時存在一個數據庫來處理結構化數據,並且數據庫不會給你「對象」,甚至表格行,但結果行。您正在尋求一種對數據關係一無所知的系統,但可以加入它們併爲您提供對象。這當然是可能的,但它並不是特別常見。我會用另一種解決方案更新我的答案。 – Marcin 2012-03-08 15:04:54