我有一些问题。在DB中考虑这个数据模式(为简单起见,我省略了一些内容):
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") );
它只返回id = 1,因为在id = 2的行上table2_id为null。
它排除id = 2的行,因为它在第二个Q上失败。 在这种情况下,如何从Django获取两行?
有什么想法吗?
答案 0 :(得分:0)
据我所知,数据库架构不是通过django-orm创建的。在你的情况下,Django制作INNER JOIN
。使用:
table2 = ForeignKey('Table2', blank=True, null=True)