我定义了以下模型:
class TestCaseResult(models.Model):
run_result = models.ForeignKey(
RunResult,
on_delete=models.CASCADE,
)
name = models.CharField(max_length=128)
duration = models.DurationField(default=datetime.timedelta)
result = models.CharField(
max_length=1,
choices=(('f', 'failure'), ('s', 'skipped'), ('p', 'passed'), ('e', 'error')),
)
我试图在单个查询中获取给定run_result的每种结果的计数,以及具有该结果的测试用例的持续时间之和。
这给了我每种结果类型的计数,但是我不知道如何获得包括的持续时间之和。
qs = TestCaseResult.objects.filter(run_result=run_result).values('result').annotate(result_count=Count('result'))
我基本上希望将此作为结果SQL:
SELECT
"api2_testcaseresult"."result",
SUM("api2_testcaseresult"."duration") AS "duration",
COUNT("api2_testcaseresult"."result") AS "result_count"
FROM "api2_testcaseresult"
WHERE "api2_testcaseresult"."run_result_id" = 3
GROUP BY "api2_testcaseresult"."result";
请注意,“持续时间”如何不属于“ group by”子句的一部分。
答案 0 :(得分:0)
您只需添加第二个>>> :set -XNoNegativeLiterals
>>> -1 `mod` 2
-1
>>> :set -XNegativeLiterals
>>> -1 `mod` 2
1
>>> - 1 `mod` 2
-1
:
annotate()
这应该为您提供所需的SQL查询。