将postgres原始查询转换为Django ORM查询并按以下项分组

问题描述 投票:0回答:1

我有一个原始的Postgresql查询,需要将其转换为Django ORM查询。

我能够在Postgres中执行查询,并看到预期的结果。我在postgres DB上获得5条原始查询的记录。

但是当我执行Django ORM查询时,它没有提供预期的输出。我在postgres的ORM查询中获得了78个结果。

请让我知道我在Django ORM查询中在哪里出错。

原始postgres查询:

select customer_id, program_id, project_id, store_id, count(store_id) 
from public.alerts_alert where (customer_id=2 and program_id=134 and project_id=1364) 
group by customer_id, program_id, project_id, store_id 

Django ORM查询:

queryset = Alert.objects.filter(**filter_params).annotate(
            customer_name=F('customer__name'),
            program_name=F('program__name'),
            project_name=F('project__name'),
            store_count=Count('store')
        )

**filter_params是我将提供原始查询集中提到的实际值的地方。

Edit1:

这是我尝试打印queryset.query时得到的。

SELECT "alerts_alert"."time_created", "alerts_alert"."time_modified", "alerts_alert"."registered_timestamp", "alerts_alert"."id", "alerts_alert"."title", "alerts_alert"."content", "alerts_alert"."alert_date", "alerts_alert"."expiration_date", "alerts_alert"."current_status_id", "alerts_alert"."customer_id", "alerts_alert"."store_id", "alerts_alert"."program_id", "alerts_alert"."project_id", "alerts_alert"."visit_id", "alerts_alert"."batch_id", COUNT("alerts_alert"."store_id") AS "store_count", "programs_program"."name" AS "program_name", "projects_project"."name" AS "project_name", "customers_account"."name" AS "customer_name" FROM "alerts_alert" INNER JOIN "projects_project" ON ("alerts_alert"."project_id" = "projects_project"."id") INNER JOIN "customers_account" ON ("alerts_alert"."customer_id" = "customers_account"."id") INNER JOIN "programs_program" ON ("alerts_alert"."program_id" = "programs_program"."id") WHERE ("alerts_alert"."expiration_date" IS NULL AND "alerts_alert"."project_id" = 1364 AND "alerts_alert"."customer_id" = 2 AND "alerts_alert"."program_id" = 134 AND "alerts_alert"."unregistered_timestamp" IS NULL) GROUP BY "alerts_alert"."id", "programs_program"."name", "projects_project"."name", "customers_account"."name"

我不知道为什么,但是由于某种原因,Django查询集将id列添加到group by子句中,即使我没有指定它。

python django postgresql django-models django-orm
1个回答
0
投票

[您是否尝试打印queryset.query以查看Django ORM尝试执行的操作与原始查询之间的区别?向我们提供orm查询后,很乐意帮助您确定是否需要。

© www.soinside.com 2019 - 2024. All rights reserved.