django聚合和过滤结果

时间:2011-05-05 16:30:16

标签: python mysql django filtering

聚合后在Django中的

如果我对未汇总的列使用filter,请执行 我在SQL查询的where子句中使用它 而不是按预期在having

示例如下:

我有一张测试结果表。 假设我有TestA和TestB。

Version:   2    |   2   |   2
TestA   :Pass   |Null   |Fail
testB   :Error  |Fail   |Null

每次测试都可以随时进行,
我想显示该测试的最新结果。

我尝试了什么

x=Site.results.filter(timeEnd__isnull=False).values('idTest').annotate(Max('timeEnd'))

然后使用:

过滤x
x.filter(result=<number of result>)

但是我使用第二个过滤器得到了原始x中没有的结果。

如何获得所需的结果?

但如果我尝试显示:

result(Version=2).failedFilter()
TestA=Fail
TestB=Fail

result(Version=2).PassedFilter()
TestA=Pass

result(Version=2).ErrorFilter()
TestB=Error

result(version=2)
TestA=Fail
TestB=Fail

当实际上除了失败的过滤器之外,所有其余的都需要为空。

摘要

tables:
test
----
    id
    name

Site
----
    id
    name

testresult
----------
    id
    date
    testid
    siteid
    result(int)

我想获得每个测试的网站的最终结果 然后按结果过滤。

1 个答案:

答案 0 :(得分:1)

latest()将返回查询集中的最新模型。

site = Site.objects.get(id=1)
for test in Test.objects.all():
        test_result = TestResult.objects.filter(site=site, test=test).latest('timeEnd')
        print test_result.result

annotate()只计算一个值,它不进行任何过滤。我认为你当前的查询将返回任何有timeEnd设置的测试,而不是最后一个(这是我想你想要的)。