首先,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 的行为?