Как перехватить исключение Model.DoesNotExist в структуре отдыха Django? - PullRequest
0 голосов
/ 30 сентября 2018

В django остальные рамки работают.Когда вы запрашиваете модель базы данных, и она не существует, вы получите исключение, как показано ниже:

ModleName.DoesNotExist

Это исключение будет изменяться в зависимости от названия модели.Например:

Query modle Car поднимет

Car.DoesNotExist

Query model Plane поднимется

Plane.DoesNotExist

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

    try:
        return Car.objects.get(pk=1)
    except Car.DoesNotExist:
        raise Http404

Почему django разрабатывает такое исключение?Можно ли зафиксировать исключение с его общим происхождением?

1 Ответ

0 голосов
/ 30 сентября 2018

Вы можете использовать ObjectDoesNotExist:

from django.core.exceptions import ObjectDoesNotExist

try:
    return Car.objects.get(pk=1)
except ObjectDoesNotExist:
    raise Http404

ObjectDoesNotExist поймает DoesNotExist исключений для всех моделей.

Джанго также предоставляет get_object_or_404() ярлык, поэтому вам не нужно явно поднимать Http404.

...