У меня есть модель (представляющая «работы»), который содержит DateTimeField называется DATE_CREATED. У меня есть еще один номер date_modified.Джанго - Сортировка по дате QuerySet вместо DATETIME
Я хотел бы сортировать по -date_modified, так что последние измененные «рабочие места» находятся в верхней части моего списка. Проблема в том, что несколько выполняемых заданий будут постоянно переупорядочиваться каждый раз, когда метка времени обновляется. Если поле 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
Если вы работаете с датами времени, зависящими от часового пояса, то часовые пояса обычно считаются принадлежащими к слою презентации. DateTimes должен быть в UTC внутренне и преобразован как можно позже. См. Https://docs.djangoproject.com/en/1.10/topics/i18n/timezones/ –