我有一個包含日期時間字段的模型(代表'作業'),名爲date_created。我有另一個叫date_modified。Django - 按日期而不是日期時間對Queryset進行排序
我想按-date_modified排序,以便最近修改的'jobs'位於我的列表頂部。問題在於,每次更新時間戳時,多個正在運行的作業都會繼續重新排序。如果date_modified字段按照如果它是DateField排序,那麼我可以先排序所有'今天'已修改的'作業',然後從第二個值(如date_created)中排序,以便它們會隨着時間戳被修改,不會更改列表中的位置。
這是我現在有:
queryset = DataCollection.objects.all().order_by('-date_modified','-date_created')
我發現了一篇相關的文章,但似乎與1.9版本過時: Django sorting by date(day)
UPDATE
目前的修復,我看着是這樣的:
queryset = DataCollection.objects.all().extra(select =
{'custom_dt': 'date(date_modified)'}).order_by('-custom_dt','-date_created')
這與@lampslave建議的內容最爲相似,但它使用了extra方法,這種方法將來會被棄用......我認爲我不會很快升級到Django的更高版本,但是這個使我的胃有點不安。
如果您使用的時區,那就要小心日期時間的日期取決於您的日期時間所在的時區。 –
好點。爲什麼DateTimeField的包含時區信息? – Dan
如果您在工作時區感知日期時間,則時區通常被視爲屬於表示層。日期時間應在UTC內部並儘可能晚地進行轉換。請參閱https://docs.djangoproject.com/en/1.10/topics/i18n/timezones/ –