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获得两行?
任何想法?
我觉得应该是ForeignKey('Table2',blank = True,null = True) –
@Pavel,谢谢! – defuz
感谢您的帮助。 :) – PerBeatus