order_by () и latest () возвращают различные значения набора запросов - PullRequest
0 голосов
/ 01 ноября 2019

При запросе к базе данных с помощью order_by('date') and latest('date') возвращается другой экземпляр ..... какой лучший способ получить последний экземпляр?

Я использую Python 2.7 и django1.8.19

from apps.model import MyModel

def function():
latest_ins = MyModel.objects.filter(member=member).latest('date').date
latest_ins = MyModel.objects.filter(member=member).order_by('date').first().values('date')

1 Ответ

0 голосов
/ 07 ноября 2019

Согласно документации 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...