Django 获取组的最新外国计数

Posted

技术标签:

【中文标题】Django 获取组的最新外国计数【英文标题】:Django get latest foreign count for group 【发布时间】:2015-11-02 15:38:56 【问题描述】:

我正在使用 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】:

尝试:

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

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)

【讨论】:

以上是关于Django 获取组的最新外国计数的主要内容,如果未能解决你的问题,请参考以下文章

在 django 的查询集中获取对象的计数

Django Celery 获取任务计数

在 Django 中有效地获取相关模型的计数

在 Django shell 会话期间获取 SQL 查询计数

Django通过查询集中的唯一值获取总计数和计数

Django 查询 - 在带注释的计数过滤器中获取父对象