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 d3eac6d

Browse files
tpilarascottfisk
authored andcommitted
Require 'id' is included in PATCH request (#245)
* Require 'id' included in PATCH request * Add missing 'id' to test
1 parent bd9b5a5 commit d3eac6d

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

‎example/tests/test_model_viewsets.py‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,25 @@ def test_key_in_detail_result(self):
184184

185185
assert expected_dump == content_dump
186186

187+
def test_patch_requires_id(self):
188+
"""
189+
Verify that 'id' is required to be passed in an update request.
190+
"""
191+
data = {
192+
'data': {
193+
'type': 'users',
194+
'attributes': {
195+
'first-name': 'DifferentName'
196+
}
197+
}
198+
}
199+
200+
response = self.client.patch(self.detail_url,
201+
content_type='application/vnd.api+json',
202+
data=dump_json(data))
203+
204+
self.assertEqual(response.status_code, 400)
205+
187206
def test_key_in_post(self):
188207
"""
189208
Ensure a key is in the post.

‎example/tests/test_views.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def test_delete_relationship_overriding_with_none(self):
155155
request_data = {
156156
'data': {
157157
'type': 'comments',
158+
'id': self.second_comment.id,
158159
'relationships': {
159160
'author': {
160161
'data': None

‎rest_framework_json_api/parsers.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ def parse(self, stream, media_type=None, parser_context=None):
8080
resource_type=resource_name
8181
)
8282
)
83+
if not data.get('id') and request.method in ('PATCH', 'PUT'):
84+
raise ParseError("The resource identifier object must contain an 'id' member")
8385

8486
# Construct the return data
8587
parsed_data = {'id': data.get('id')}

0 commit comments

Comments
(0)

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