Django获得最新的外国统计数据

时间:2015-11-02 15:38:57

标签: django orm group-by

我正在使用django 1.8.4 我想让问题计入每个名字的最新测试。

模型

class MyTest(models.Model):
    name = models.CharField()
    date = models.DateTimeField()

class Problem(models.Model)
    test = models.ForeignKey(MyTest, related_name='problems')
    description = models.charField()

现在,我想知道每个名字的最新测试问题 例如,如果我的表数据是

name  date       problems count
foo   10.10.15    50
foo   10.09.15    30
bar   10.07.15    23
foo   10.03.15    54
bar   05.03.15    31
foo   10.01.15    97

然后我想得到。

name  date       problems count
foo   10.10.15    50
bar   10.07.15    23

到目前为止我尝试了什么:

last_date = MyTest.objects.values('name').annotate(max_date=Max('date'))

这给了我每个名字的最后日期。我接着尝试了这个:

last_test_pcount = MyTest.objects.values('name').annotate(max_date=Max('date'),pcount=Count('problems'))

这给了我每个测试的所有问题的总和,而不仅仅是最后一次测试的计数。

1 个答案:

答案 0 :(得分:0)

尝试:

获取每个名称的最新测试:

tests = Mytest.objects.order_by('name','-date').distinct('name').values('id','name','date')

为每个测试添加问题计数:

for test in tests:
    test['pcount'] = Problem.objects.get(test_id=test['id']).count()

根据日期对测试列表进行排序

result = sorted(tests, key=lambda k: k['date'], reverse=True)