django orm从案例中选择

django orm从案例中选择,django,orm,case-when,Django,Orm,Case When,我想通过Django ORM从子查询中获取一些数据。 这是我的例外SQL SELECT "risk_level", COUNT("t"."id") FROM( SELECT "task_taskreport"."id" as "id", CASE WHEN MAX("task_vuln"."severity_points") >= 8.0 THEN 'high' WHEN (MAX("task_vuln"."severity_

我想通过Django ORM从子查询中获取一些数据。 这是我的例外SQL

SELECT "risk_level", COUNT("t"."id") 
FROM(
    SELECT 
        "task_taskreport"."id" as "id",
    CASE
       WHEN MAX("task_vuln"."severity_points") >= 8.0 THEN 'high'
       WHEN (MAX("task_vuln"."severity_points") >= 5.0 AND MAX("task_vuln"."severity_points") <= 7.0) THEN 'middle'
       WHEN (MAX("task_vuln"."severity_points") >= 2.0 AND MAX("task_vuln"."severity_points") <= 4.0) THEN 'low'
       WHEN MAX("task_vuln"."severity_points") <= 1.0 THEN 'none'
      ELSE NULL
   END AS "risk_level"
   FROM "task_taskreport"
   LEFT OUTER JOIN "task_taskreport_vuln" ON ("task_taskreport"."id" = 
   "task_taskreport_vuln"."task_report_id")
   LEFT OUTER JOIN "task_vuln" ON ("task_taskreport_vuln"."vuln_id" = "task_vuln"."vul_id")
   WHERE "task_taskreport"."subtask_id" = 21
   GROUP BY "task_taskreport"."id" ORDER BY "task_taskreport"."id" DESC) as t 
   group by "risk_level";
但这带来了一个例外

django.core.exceptions.FieldError: Cannot compute Count('risk_level'): 'risk_level' is an aggregate

如果您有一个复杂的SQL查询,它完全满足您的需要,那么您可以将其作为查询集进行查询和使用

以下是Django文档页面中的示例:

>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
...     print(p)
John Smith
Jane Jones
>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
...     print(p)
John Smith
Jane Jones