В чем точная разница между get_list_or_404 и get_object_or_404 в Django? - PullRequest
1 голос
/ 27 мая 2020

Меня немного смущает разница между get_list_or_404 и get_object_or_404 в Django. Я использую объект один для получения сообщений определенного пользователя, но хотел бы узнать больше о том, как можно использовать get_list_or_404.

1 Ответ

1 голос
/ 27 мая 2020
def get_object_or_404(klass, *args, **kwargs):
Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.

is shortcut for

try:
    return Model.objects.get(pk=...)
except Model.DoesNotExist:
    raise Http404()
def get_list_or_404(klass, *args, **kwargs):
Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.

is shortcut for

obj_list = list(Model.objects.filter(title=...))
if not obj_list:
    raise Http404()
return obj_list

Поскольку ярлык get_object_or_404 вызывает get (), исключение MultipleObjectsReturned будет вызвано, если будет найдено более одного объекта.

Поскольку ярлык get_list_or_404 возвращает список, такое исключение не возникает за исключением того, что возвращенный список не пуст.

...