【发布时间】:2021-05-17 10:03:03
【问题描述】:
我的子查询在不同的机器上表现不同。 子查询如下:
Sale.objects.filter(object_id=OuterRef("id"), is_canceled=False)
.values("object")
.annotate(total_amount=Coalesce(Sum("amount"), 0))
.values("total_amount")
在我的本地机器上,我有 3 个 Sale 实例,查询的结果是:
<QuerySet [{'object': 1, 'total_amount': 210}]>
在我的开发机器上,我有 2 个 Sale 实例,调用结果如下所示:
<QuerySet [{'object': 100, 'total_amount': 20}, {'object': 100, 'total_amount': 10}]>
我检查了 Django ORM 在这两种情况下生成的查询,看起来都一样
SELECT "object_sale"."object_id", COALESCE(SUM("object_sale"."amount"), 0) AS "total_amount"
FROM "object_sale"
WHERE ("object_sale"."object_id" = 1)
GROUP BY "object_sale"."object_id", "object_sale"."price"
ORDER BY "object_sale"."price" ASC
【问题讨论】:
-
"object_sale"."price"在 group by 和 order by 中来自哪里? -
来自
order_by -
但是我在查询集上没有看到任何
order_by调用?还是默认排序? -
是的,它来自模型的默认排序
标签: python django django-orm