diff --git a/CHANGELOG.md b/CHANGELOG.md index ae2e7999..3b658b20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ This release is not backwards compatible. For easy migration best upgrade first ### Fixed * Avoid printing invalid pointer when api returns 404 +* Avoid exception when using `ResourceIdentifierObjectSerializer` with unexisting primary key ## [2.8.0] - 2019-06-13 diff --git a/example/tests/test_serializers.py b/example/tests/test_serializers.py index 708e4a3e..e1296e2f 100644 --- a/example/tests/test_serializers.py +++ b/example/tests/test_serializers.py @@ -119,6 +119,20 @@ def test_deserialize_primitive_data_blog(self): self.assertTrue(serializer.is_valid(), msg=serializer.errors) assert serializer.validated_data == self.blog + def test_deserialize_primitive_data_blog_with_unexisting_pk(self): + unexisting_pk = self.blog.id + self.blog.delete() + assert not Blog.objects.filter(id=unexisting_pk).exists() + + initial_data = { + 'type': format_resource_type('Blog'), + 'id': str(unexisting_pk) + } + serializer = ResourceIdentifierObjectSerializer(data=initial_data, model_class=Blog) + + self.assertFalse(serializer.is_valid()) + self.assertEqual(serializer.errors[0].code, 'does_not_exist') + def test_data_in_correct_format_when_instantiated_with_queryset(self): qs = Author.objects.all() serializer = ResourceIdentifierObjectSerializer(instance=qs, many=True) diff --git a/rest_framework_json_api/serializers.py b/rest_framework_json_api/serializers.py index 8a038c54..be0dcace 100644 --- a/rest_framework_json_api/serializers.py +++ b/rest_framework_json_api/serializers.py @@ -1,4 +1,5 @@ import inflection +from django.core.exceptions import ObjectDoesNotExist from django.db.models.query import QuerySet from django.utils.translation import ugettext_lazy as _ from rest_framework.exceptions import ParseError