diff --git a/example/tests/test_views.py b/example/tests/test_views.py index 774b06a7..28c39915 100644 --- a/example/tests/test_views.py +++ b/example/tests/test_views.py @@ -77,6 +77,18 @@ def test_patch_invalid_entry_relationship_blog_returns_400(self): content_type='application/vnd.api+json') assert response.status_code == 400 + def test_relationship_view_errors_format(self): + url = '/entries/{}/relationships/blog'.format(self.first_entry.id) + response = self.client.patch(url, + data=json.dumps({'data': {'invalid': ''}}), + content_type='application/vnd.api+json') + assert response.status_code == 400 + + result = json.loads(response.content.decode('utf-8')) + + assert 'data' not in result + assert 'errors' in result + def test_get_empty_to_one_relationship(self): url = '/comments/{}/relationships/author'.format(self.first_entry.id) response = self.client.get(url) diff --git a/rest_framework_json_api/renderers.py b/rest_framework_json_api/renderers.py index 1a2edb6c..04a9aaff 100644 --- a/rest_framework_json_api/renderers.py +++ b/rest_framework_json_api/renderers.py @@ -419,13 +419,17 @@ def render(self, data, accepted_media_type=None, renderer_context=None): view = renderer_context.get("view", None) request = renderer_context.get("request", None) + # Get the resource name. + resource_name = utils.get_resource_name(renderer_context) + + # If this is an error response, skip the rest. + if resource_name == 'errors': + return self.render_errors(data, accepted_media_type, renderer_context) + from rest_framework_json_api.views import RelationshipView if isinstance(view, RelationshipView): return self.render_relationship_view(data, accepted_media_type, renderer_context) - # Get the resource name. - resource_name = utils.get_resource_name(renderer_context) - # If `resource_name` is set to None then render default as the dev # wants to build the output format manually. if resource_name is None or resource_name is False: @@ -433,10 +437,6 @@ def render(self, data, accepted_media_type=None, renderer_context=None): data, accepted_media_type, renderer_context ) - # If this is an error response, skip the rest. - if resource_name == 'errors': - return self.render_errors(data, accepted_media_type, renderer_context) - json_api_data = data json_api_included = list() # initialize json_api_meta with pagination meta or an empty dict