Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /