Skip to content

Commit bf7bd7b

Browse files
committed
Merge pull request #171 from Sapena/parser-allow-relationships-deletion
Relationship deletion
2 parents 59f5da9 + 314ad61 commit bf7bd7b

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

example/tests/test_views.py

+16
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,22 @@ def test_delete_to_one_relationship_should_fail(self):
145145
response = self.client.delete(url, data=json.dumps(request_data), content_type='application/vnd.api+json')
146146
assert response.status_code == 405, response.content.decode()
147147

148+
def test_delete_relationship_overriding_with_none(self):
149+
url = '/comments/{}'.format(self.second_comment.id)
150+
request_data = {
151+
'data': {
152+
'type': 'comments',
153+
'relationships': {
154+
'author': {
155+
'data': None
156+
}
157+
}
158+
}
159+
}
160+
response = self.client.patch(url, data=json.dumps(request_data), content_type='application/vnd.api+json')
161+
assert response.status_code == 200, response.content.decode()
162+
assert response.data['author'] == None
163+
148164
def test_delete_to_many_relationship_with_no_change(self):
149165
url = '/entries/{}/relationships/comment_set'.format(self.first_entry.id)
150166
request_data = {

example/urls_test.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.conf.urls import include, url
22
from rest_framework import routers
33

4-
from example.views import BlogViewSet, EntryViewSet, AuthorViewSet, EntryRelationshipView, BlogRelationshipView, \
4+
from example.views import BlogViewSet, EntryViewSet, AuthorViewSet, CommentViewSet, EntryRelationshipView, BlogRelationshipView, \
55
CommentRelationshipView, AuthorRelationshipView
66
from .api.resources.identity import Identity, GenericIdentity
77

@@ -10,6 +10,7 @@
1010
router.register(r'blogs', BlogViewSet)
1111
router.register(r'entries', EntryViewSet)
1212
router.register(r'authors', AuthorViewSet)
13+
router.register(r'comments', CommentViewSet)
1314

1415
# for the old tests
1516
router.register(r'identities', Identity)

rest_framework_json_api/parsers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def parse_relationships(data):
4040
parsed_relationships = dict()
4141
for field_name, field_data in relationships.items():
4242
field_data = field_data.get('data')
43-
if isinstance(field_data, dict):
43+
if isinstance(field_data, dict) or field_data is None:
4444
parsed_relationships[field_name] = field_data
4545
elif isinstance(field_data, list):
4646
parsed_relationships[field_name] = list(relation for relation in field_data)

0 commit comments

Comments
 (0)