J'ai une liste et je veux filtrer mon Queryset lorsque l'un de ces éléments se trouve dans la clé non primaire 'test' d'une table étrangère. J'écris donc quelque chose comme ceci :
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]
Cela renvoie une liste vide. Lorsque je regarde la requête SQL qu'il a générée, j'obtiens :
SELECT ...
FROM ...
WHERE "job"."next_task_id" IN (test1, test2, test3, test4, test5) LIMIT 20;
Alors que ce que ça aurait dû être, c'est ça :
SELECT ...
FROM ...
WHERE "job"."next_task_id" IN ('test1', 'test2', 'test3', 'test4', 'test5') LIMIT 20;
Sans les guillemets, SQLite3 croit qu'il s'agit de noms de colonnes, et ne renvoie rien. Lorsque j'ajoute manuellement les guillemets et que j'exécute une requête SQLite3 sur la table sans Django du tout, j'obtiens les résultats souhaités. Comment faire pour que Django exécute la requête correctement ?