From 3d54d4cd9ab51a9930f4d187d1472a46d306a24a Mon Sep 17 00:00:00 2001 From: Jeroen Dekkers Date: Thu, 29 May 2014 00:23:04 +0200 Subject: [PATCH] Return 409 Conflict when we can't delete an object because of a reverse relation with on_delete set to PROTECT on the foreign key. --- rest_framework/mixins.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index e1a24dc7e..5dd7e8fac 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -7,6 +7,7 @@ which allows mixin classes to be composed in interesting ways. from __future__ import unicode_literals from django.core.exceptions import ValidationError +from django.db.models import ProtectedError from django.http import Http404 from rest_framework import status from rest_framework.response import Response @@ -191,6 +192,9 @@ class DestroyModelMixin(object): def destroy(self, request, *args, **kwargs): obj = self.get_object() self.pre_delete(obj) - obj.delete() + try: + obj.delete() + except ProtectedError: + return Response('Cannot delete object because of protected foreign key relation', status=status.HTTP_409_CONFLICT) self.post_delete(obj) return Response(status=status.HTTP_204_NO_CONTENT)