Django / Django остальные рамки просмотра uncaught исключения - PullRequest
0 голосов
/ 03 апреля 2019

Когда в моих настройках установлено значение DEBUG = True, я вижу следующую ошибку

Traceback:

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34.             response = get_response(request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
115.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
54.         return view_func(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py" in view
116.             return self.dispatch(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
495.             response = self.handle_exception(exc)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
455.             self.raise_uncaught_exception(exc)

File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
492.             response = handler(request, *args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py" in create
21.         self.perform_create(serializer)

File "/device_mgmt/selection/views.py" in perform_create
84.             serializer.save(realm=utils.get_realm_from_request(self.request))

File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py" in save
214.             self.instance = self.create(validated_data)

File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py" in create
943.             instance = ModelClass._default_manager.create(**validated_data)

File "/usr/local/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
82.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py" in create
422.         obj.save(force_insert=True, using=self.db)

File "/device_mgmt/selection/models.py" in save
123.         self.full_clean()

File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py" in full_clean
1203.             raise ValidationError(errors)

Exception Type: ValidationError at /company/api/company/
Exception Value: {'id': ['Company with this Id already exists.']}

Модель выдает ошибку, но вызывает остальное представление структуры 455. self.raise_uncaught_exception(exc)

Как я могу сделать так, чтобы инфраструктура отдыха использовала исключение из модели django? Я думал, что это будет обработано автоматически, поскольку в исключении есть информация о том, что пошло не так.

Когда он возвращается, все, что у меня есть, это 500 с <h1>Server error<h1>.

Я бы не предполагал, что мне нужно перехватить исключение и выполнить некоторую специальную обработку для него, поскольку это базовая ошибка django ValidationError.

Является ли проблема причиной того, что остальные компоненты также имеют тип ValidationError?

1 Ответ

0 голосов
/ 03 апреля 2019

Из документации:

Обрабатываемые исключения:

Подклассы APIException, возбуждаемые в рамках REST.

Исключение Django Http404.

Исключение Django's PermissionDenied.

Так нет. drf не обработает исключение, на которое вы ссылаетесь.

Здесь говорится, что вы можете реализовать свою собственную обработку исключений: https://www.django -rest-framework.org / апи-гид / исключения / # заказ обработки исключений

...