2010-11-25 28 views
0

對不起,我是Django的新手。所以,我在加入兩個表格的簡單查詢時遇到了麻煩。假設我有兩個表調用「表1」和「表2」有一對一的關係: 表1(FIELDA,fieldB,fieldC) 表2(FIELDA,fieldC,fieldZ)我想問一下關於Django的簡單連接技術

我想要得到的查詢結果像

SELECT T1.fieldA,fieldB,fieldC,fieldZ FROM table1 as T1, table2 as T2 WHERE T1.fieldA=T2.fieldA 

我該如何做到這一點在Django?

在此先感謝。

+2

是您的模型指定如何? – mipadi 2010-11-25 07:32:13

+0

是的,你需要開始思考模型和Django的ORM,而不是純粹在數據庫表中 - 這樣你會得到更多的ORM – 2010-11-25 07:38:25

回答

0

未經測試的代碼,寫在火車上的早下班發呆,但這應該工作:

results = Table1Model.objects.filter(fieldA__in = Table2Model.objects.all().values_list('fieldA',flat=True)) 

這將讓你查詢集相關Table1ModelObjects的。如果你只想值,最後括號後添加此,上面:

.values_list('fieldA','fieldB','fieldC','fieldZ', flat=True) 

或者,而不是所有的,記得你可以退回到原始SQL:

results = Table1Model.objects.raw("SELECT T1.fieldA,fieldB,fieldC,fieldZ 
            FROM table1 as T1, table2 as T2 
            WHERE T1.fieldA=T2.fieldA") 

,這將給你(假設你使用的是Django 1.2)。如果你想只值,從上面添加values_list位,還是看在queryset reference

0

額外的()用戶可使用隱式的extra()加入:

Table1Model.objects.extra(
    tables=['table2'], 
    where=['table1.fieldA = table2.fieldA'] 
)