2

問題があります。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の2つの行になります:id=1とid=2。

今、私はdjangoから同じものが欲しいのですが、試してみると:

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

id = 2の行ではtable2_idがnullであるため、id=1のみが返されます。

2番目のQで失敗するため、id = 2の行は除外されます。その場合、Djangoから2つの行を取得するにはどうすればよいですか?

何か案は?

4

1 に答える 1

0

私が理解しているように、データベーススキーマはdjango-ormではなく作成されます。あなたの場合、Djangomake INNER JOIN。使用する:

table2 = ForeignKey('Table2', blank=True, null=True)
于 2012-10-09T12:58:29.707 に答える