3

リストがあり、これらのアイテムのいずれかが外部テーブルの非主キー「テスト」で見つかったときに、クエリセットをフィルター処理したいと考えています。だから私はこのようなものを書きます:

test_list = ['test1', 'test2', 'test3', 'test4', 'test5']
return cls.objects.filter(reduce(lambda x, y: x | y, [models.Q(next_task__test = item) for item in test_list]))[:20]

これは空のリストを返します。生成された SQL クエリを見ると、次のようになります。

SELECT ...
FROM ...
WHERE "job"."next_task_id" IN (test1, test2, test3, test4, test5) LIMIT 20;

それがそうあるべきだったのに対し、これは次のとおりです。

SELECT ...
FROM ...
WHERE "job"."next_task_id" IN ('test1', 'test2', 'test3', 'test4', 'test5') LIMIT 20;

引用符がない場合、SQLite3 はそれらが列名であると認識し、何も返しません。手動で引用符を追加し、Django をまったく使用せずにテーブルで SQLite3 クエリを実行すると、目的の結果が得られます。Django にクエリを正しく発行させるにはどうすればよいですか?

4

3 に答える 3