Django: модель сортировки на основе разницы между двумя ее полями

#django #django-models #annotations

#django #django-модели #примечания

Вопрос:

Возьмите простой класс, подобный этому.

 class MyModel(models.Model):
    last_updated = models.DateTimeField(auto_now_add=True)
    last_viewed  = models.DateTimeField(auto_now_add=True)
  

Все, что я хочу сделать, это отсортировать выходные данные запроса к этой модели по времени между этими двумя полями, чтобы данные, которые не просматривались с момента их обновления, отображались выше, чем те, которые были.

Я чувствую, что должен иметь возможность аннотировать таблицу и сортировать по этой аннотации, но я не гений, когда дело доходит до аннотаций (или необработанного SQL, если на то пошло). Может ли кто-нибудь направить меня в правильном направлении?

Комментарии:

1. было ли решение @sdolan достаточно хорошим, чтобы выбрать его в конце концов?

Ответ №1:

Вы можете сделать что-то вроде этого:

 MyModel.objects.extra(select={'offset': 'last_viewed - last_updated'}).order_by('offset')
  

Подробное объяснение смотрите в документах.