Skip to content

Commit 348c59d

Browse files
author
Boris Pleshakov
committed
f check
1 parent 873b48e commit 348c59d

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

rest_framework_json_api/utils.py

+7-13
Original file line numberDiff line numberDiff line change
@@ -318,15 +318,8 @@ def format_drf_errors(response, context, exc):
318318
for field, error in response.data.items():
319319
field = format_value(field)
320320
pointer = '/data/attributes/{}'.format(field)
321-
# see if they passed a dictionary to ValidationError manually
322-
# The bit tricky problem is here. It is may be nested drf thing in format
323-
# name: error_object, or it may be custom error thrown by user. I guess,
324-
# if it is drf error, dict will always have single key
325-
if isinstance(error, dict):
326-
if len(error) > 1:
327-
errors.append(error)
328-
else:
329-
errors.extend(format_error_object(error, pointer, response))
321+
if isinstance(error, dict) or isinstance(error, list):
322+
errors.extend(format_error_object(error, pointer, response))
330323
elif isinstance(exc, Http404) and isinstance(error, str):
331324
# 404 errors don't have a pointer
332325
errors.extend(format_error_object(error, None, response))
@@ -336,8 +329,6 @@ def format_drf_errors(response, context, exc):
336329
if isinstance(exc, tuple(x[1] for x in classes)):
337330
pointer = '/data'
338331
errors.extend(format_error_object(error, pointer, response))
339-
elif isinstance(error, list):
340-
errors.extend(format_error_object(error, pointer, response))
341332
else:
342333
errors.extend(format_error_object(error, pointer, response))
343334

@@ -350,8 +341,11 @@ def format_drf_errors(response, context, exc):
350341
def format_error_object(message, pointer, response):
351342
errors = []
352343
if isinstance(message, dict):
353-
for k, v in message.items():
354-
errors.extend(format_error_object(v, pointer + '/{}'.format(k), response))
344+
if not all([isinstance(x, list) for x in message.values()]):
345+
errors.append(message)
346+
else:
347+
for k, v in message.items():
348+
errors.extend(format_error_object(v, pointer + '/{}'.format(k), response))
355349
elif isinstance(message, list):
356350
for num, error in enumerate(message):
357351
if isinstance(error, (list, dict)):

0 commit comments

Comments
 (0)