2012-10-09 137 views
2

我有一些問題。考慮DB這個數據模式(爲簡單起見,我忽略了一些東西):Django,ForeignKey關係和Q或

class Table1(Model): 
    field1; 
    field2; 
    table2 = ForeignKey('Table2'); 

class Table2(Model): 
    filed3; 

現在樣本數據:

Table2: 
{ id:1, field3: lola } 
{ id:2, field3: disney } 

Table1: 
{ id:1, field1: foo, field2: bar, table2_id: 1 } 
{ id:2, field1: lola, field2: bars, table2_id: null } 

及主要部分:

SQL查詢:

SELECT t1.*, t2.field3 
FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t1.table2_id=t2.id 
WHERE t1.field1 ILIKE '%lola%' OR t2.field3 ILIKE '%lola%'; 

將導致Table1的兩行形成:id = 1和id = 2。現在

我想從Django的相同,但是當我嘗試:

Table1.objects.filter(Q(filed1__icontains="lola") | Q(table2__filed3__icontains="lola")); 

,因爲table2_id是使用id = 2行空只返回ID = 1。

它排除了id = 2的行,因爲它在第二個問題上失敗 在那種情況下,我怎樣才能從Django獲得兩行?

任何想法?

回答

0

據我所知,數據庫模式不是通過django-orm創建的。在你的情況下,Django使INNER JOIN。使用:

table2 = ForeignKey('Table2', blank=True, null=True) 
+1

我覺得應該是ForeignKey('Table2',blank = True,null = True) –

+0

@Pavel,謝謝! – defuz

+0

感謝您的幫助。 :) – PerBeatus

相關問題