Skip to main content
 首页 » 编程设计

python之Django之按日期而不是日期时间对查询集进行排序

2024年10月17日37sxdcgaq8080

我有一个模型(代表“工作”),其中包含一个名为 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 文档中有描述。