Skip to content

Commit bd8b535

Browse files
slivercn2ygk
authored andcommitted
Avoid exception when using ResourceIdentifierObjectSerializer with unexisting primary key (#690)
* Added "ObjectDoesNotExist" import * Added test * Add changelog entry
1 parent 92aabaf commit bd8b535

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ This release is not backwards compatible. For easy migration best upgrade first
3333
### Fixed
3434

3535
* Avoid printing invalid pointer when api returns 404
36+
* Avoid exception when using `ResourceIdentifierObjectSerializer` with unexisting primary key
3637

3738

3839
## [2.8.0] - 2019-06-13

example/tests/test_serializers.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ def test_deserialize_primitive_data_blog(self):
119119
self.assertTrue(serializer.is_valid(), msg=serializer.errors)
120120
assert serializer.validated_data == self.blog
121121

122+
def test_deserialize_primitive_data_blog_with_unexisting_pk(self):
123+
unexisting_pk = self.blog.id
124+
self.blog.delete()
125+
assert not Blog.objects.filter(id=unexisting_pk).exists()
126+
127+
initial_data = {
128+
'type': format_resource_type('Blog'),
129+
'id': str(unexisting_pk)
130+
}
131+
serializer = ResourceIdentifierObjectSerializer(data=initial_data, model_class=Blog)
132+
133+
self.assertFalse(serializer.is_valid())
134+
self.assertEqual(serializer.errors[0].code, 'does_not_exist')
135+
122136
def test_data_in_correct_format_when_instantiated_with_queryset(self):
123137
qs = Author.objects.all()
124138
serializer = ResourceIdentifierObjectSerializer(instance=qs, many=True)

rest_framework_json_api/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import inflection
2+
from django.core.exceptions import ObjectDoesNotExist
23
from django.db.models.query import QuerySet
34
from django.utils.translation import ugettext_lazy as _
45
from rest_framework.exceptions import ParseError

0 commit comments

Comments
 (0)