@@ -318,15 +318,8 @@ def format_drf_errors(response, context, exc):
318
318
for field , error in response .data .items ():
319
319
field = format_value (field )
320
320
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 ))
330
323
elif isinstance (exc , Http404 ) and isinstance (error , str ):
331
324
# 404 errors don't have a pointer
332
325
errors .extend (format_error_object (error , None , response ))
@@ -336,8 +329,6 @@ def format_drf_errors(response, context, exc):
336
329
if isinstance (exc , tuple (x [1 ] for x in classes )):
337
330
pointer = '/data'
338
331
errors .extend (format_error_object (error , pointer , response ))
339
- elif isinstance (error , list ):
340
- errors .extend (format_error_object (error , pointer , response ))
341
332
else :
342
333
errors .extend (format_error_object (error , pointer , response ))
343
334
@@ -350,8 +341,11 @@ def format_drf_errors(response, context, exc):
350
341
def format_error_object (message , pointer , response ):
351
342
errors = []
352
343
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 ))
355
349
elif isinstance (message , list ):
356
350
for num , error in enumerate (message ):
357
351
if isinstance (error , (list , dict )):
0 commit comments