我有一个模型(代表“工作”),其中包含一个名为 date_created 的 DateTimeField。我有另一个叫做 date_modified。
我想按 -date_modified 排序,以便最近修改的“工作”位于我列表的顶部。问题是每次更新时间戳时,多个正在运行的作业将不断重新排序。如果 date_modified 字段按照 DateField 进行排序,那么我可以先对“今天”修改过的所有“作业”进行排序,然后对第二个值(如 date_created),这样它们就不会随着时间戳的修改而改变列表中的位置。
这是我现在拥有的:
queryset = DataCollection.objects.all().order_by('-date_modified','-date_created')
我找到了一篇相关文章,但在 1.9 版本中似乎已经过时: Django sorting by date(day)
更新
我正在查看的当前修复是这样的:
queryset = DataCollection.objects.all().extra(select =
{'custom_dt': 'date(date_modified)'}).order_by('-custom_dt','-date_created')
它与@lampslave 的建议最相似,但它使用了 extra方法,将来会被弃用...我不认为我会很快升级到 Django 的更高版本,但这让我的胃有点不安。
请您参考如下方法:
在这种情况下,我会获取查询集,然后在 View 中对其进行排序。
sorted(DataCollection.objects.all(), key = lambda x: x.date_modified.date(), reverse = True)
要按两个键排序,您可以使用 attrgetter ,在 HowTo/Sorting 文档中有描述。
