Они не эквивалентны, но это сильно зависит от конкретной модели. Мы не знаем подробностей вашей модели Comments
, но если предположить, что поле автор не является уникальным:
Для первого оператора:
Comments.objects.filter(writer=self.request.user).latest('id')
возвратов в сущности, объект с самым большим id среди набора запросов всех комментариев к конкретному писателю. Если вы посмотрите на django.db.connections['default'].queries
, увидите, что итоговый запрос представляет собой оператор SELECT .. ORDER_BY .. LIMIT ..
.
Для второго утверждения:
Comments.objects.get(writer=self.request.user)
Возвращает конкретную запись ФОТ этого писателя. В случае, если их более одного, вы получаете исключение MultipleObjectsReturned
. Если объект не найден, вы получаете исключение DoesNotExist
. В случае, если это будет уникальное поле или случайно будет один объект, результирующий запрос будет оператором SELECT .. WHERE
, который выполняется быстрее.
В отношении документации, если вы посмотрите на ссылку Options.get_latest_by
, есть более подробная информация о назначении функции latest
. Подумайте об этом больше о удобстве Django. Тем не менее очень важно понять, как Django оценивает запросы и полученный SQL, и всегда есть много способов достичь одного и того же запроса, так что это вопрос логики.
Они оба дают одинаковый результат, но получить используется, когда есть только одна запись в базе данных, и где, как фильтр используется для получения QuerySet. Когда мы используем get, если условие терпит неудачу, оно поднимет. ИсключениеDoesNotExist, где в качестве фильтра не будет повышать ошибку, вместо этого возвращается пустой Queryset. –
MicroPyramid