まず、Django は不要な引用符を追加します。これにより、PostgreSQL 構文エラーが発生します。
Model.objects.extra(tables=['(SELECT ... FROM model) AS "model_alias"'],
where=...)
生産する
SELECT ... FROM "model" , "(SELECT ...) AS "model_alias"" WHERE ...
-- 構文エラー、ここで
SELECT ... FROM "model" , (SELECT ...) AS "model_alias" WHERE ...
大丈夫です。
第二に、ドキュメントではエイリアスを作成する必要があると約束されていますが、メソッドtables
のパラメーターでのテーブル名の余分な出現は無視されます。extra
Model.objects.extra(tables=['model'], where=...)
SELECT ... FROM "model" WHERE ...
-- エイリアスなしで生成されます。
間違いはどこですか?このような Django の動作を克服するにはどうすればよいですか?