【发布时间】:2014-07-16 18:28:44
【问题描述】:
我有一个 Django 模型(极其简化),如下所示:
class MyModel(models.Model):
date = models.DateTimeField()
number = models.PositiveIntegerField()
我想获取唯一的numbers 列表,按它们出现的时间倒序排列。
以这些数据为例(dates 在此处排序以提高可读性):
date | number
-------------+-------
24/12/2014 | 12
23/12/2014 | 8
22/12/2014 | 8
21/12/2014 | 5
20/12/2014 | 12
19/12/2014 | 5
18/12/2014 | 14
我会得到一个如下所示的列表:
[12, 8, 5, 14]
直觉上我会这样写查询:
MyModel.objects.order_by('-date').distinct('number')
但这是无效的 ORM 代码。
我该如何解决这个问题?
请注意,有问题的表包含数百万行可能有很多重复的numbers,所以我无法以“幼稚”的方式解决这个问题(例如,遍历来自MyModel.objects.order_by('-date') 的行并选择numbers 如果他们之前没有被人看到过,请立即联系他们)。
【问题讨论】:
-
试试这套(MyModel.objects.order_by('-date').values('number'))
-
@Sławek 这行不通;在 Python 中,
set是无序的。因此,不能保证number值的顺序正确。此外,这会导致对整个查询集进行评估,如果您有数百万行,这将是一个问题。
标签: python django django-orm