umutbozkurt/django-rest-framework-mongoengine

Catch exception raised by reverse_delete_rule=DENY

Vayel opened this issue · 0 comments

Vayel commented
class Parent(Document):
    ref = ReferenceField('Child', reverse_delete_rule=DENY)

DELETE /children/{id}/ raises an exception:

Traceback (most recent call last):
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/viewsets.py", line 86, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/views.py", line 489, in dispatch
    response = self.handle_exception(exc)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/views.py", line 449, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/views.py", line 486, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/mixins.py", line 93, in destroy
    self.perform_destroy(instance)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/rest_framework/mixins.py", line 97, in perform_destroy
    instance.delete()
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/mongoengine/document.py", line 557, in delete
    **self._object_key).delete(write_concern=write_concern, _from_doc_delete=True)
  File "/home/vincent/.local/share/virtualenvs/ieml/lib/python3.6/site-packages/mongoengine/queryset/base.py", line 445, in delete
    % (document_cls.__name__, field_name)
mongoengine.errors.OperationError: Could not delete document (Post.document refers to it)

The API should return a 403 status code.