【发布时间】:2019-03-03 16:50:57
【问题描述】:
我正在从 Django 1.8.19 升级到 1.11.15,我发现有一段代码出现问题。
特别是这个查询正在做一些与以前不同的事情。
project_groups = brand.project_groups.prefetch_related(
'project', 'project__score', 'project__themes').filter(
project=projects
).distinct()
以前(在 Django 1.8 中),根据“project_groups.query”的输出,它产生的 SQL 包括:
... projectgroup.project_id IN [projects query]
现在它会产生 SQL 读取:
... projectgroup.project_id = [projects query]
当 [projects query] 返回不止一行时,这会中断。所以我得到一个:
ProgrammingError: more than one row returned by a subquery used as an expression
我对此次升级代码所做的唯一更改是模型和迁移以使用 django.contrib.postgres.fields 中的 ArrayField 和 HStoreField 而不是 django_hstore 等效项。
我的猜测是原始代码是错误的,但由于 Django 中的一个错误(过滤器/预取相关)现在已经修复,所以可以正常工作。这可能是正确的吗?如果这实际上是 Django 中的一个 新 错误,我不想编写依赖它的代码!
【问题讨论】:
标签: django postgresql django-1.8 django-1.11