Согласно документации Django , последняя работает с датами и возвращает один экземпляр, самый последний объект в соответствии с указанным параметром. Таким образом, он выполняет сортировку и фильтрацию.
order_by
, напротив, будет сортировать объекты, но не фильтровать их. В вашем примере order_by('date')
отсортирует ваш объект в хронологическом порядке, сначала самые старые элементы, а последние - самые последние. order_by('date').first()
является эквивалентом earliest('date')
. Вот почему вы не получаете такие же экземпляры. Вы должны либо сделать order_by('-date').first()
или order_by('date').last()
.
Какой использовать? Я бы выбрал последний () или самый ранний (), так как легче читать менее подверженных ошибкам.
Примечание: вам действительно стоит подумать о переходе на Django 2.2, так как 1.7 больше не поддерживается. Точно так же, если можете, используйте python 3.x.