mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-22 01:26:53 +03:00
Handle tuples same as lists in ValidationError detail context (#7647)
This commit is contained in:
parent
3db8877889
commit
19655edbf7
|
@ -20,7 +20,7 @@ def _get_error_details(data, default_code=None):
|
|||
Descend into a nested data structure, forcing any
|
||||
lazy translation strings or strings into `ErrorDetail`.
|
||||
"""
|
||||
if isinstance(data, list):
|
||||
if isinstance(data, (list, tuple)):
|
||||
ret = [
|
||||
_get_error_details(item, default_code) for item in data
|
||||
]
|
||||
|
@ -150,7 +150,9 @@ class ValidationError(APIException):
|
|||
|
||||
# For validation failures, we may collect many errors together,
|
||||
# so the details should always be coerced to a list if not already.
|
||||
if not isinstance(detail, dict) and not isinstance(detail, list):
|
||||
if isinstance(detail, tuple):
|
||||
detail = list(detail)
|
||||
elif not isinstance(detail, dict) and not isinstance(detail, list):
|
||||
detail = [detail]
|
||||
|
||||
self.detail = _get_error_details(detail, code)
|
||||
|
|
|
@ -2,6 +2,7 @@ from django.test import TestCase
|
|||
|
||||
from rest_framework import serializers, status
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.exceptions import ValidationError
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.settings import api_settings
|
||||
from rest_framework.test import APIRequestFactory
|
||||
|
@ -99,3 +100,12 @@ class TestValidationErrorWithCodes(TestCase):
|
|||
response = view(request)
|
||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
||||
assert response.data == self.expected_response_data
|
||||
|
||||
|
||||
class TestValidationErrorConvertsTuplesToLists(TestCase):
|
||||
def test_validation_error_details(self):
|
||||
error = ValidationError(detail=('message1', 'message2'))
|
||||
assert isinstance(error.detail, list)
|
||||
assert len(error.detail) == 2
|
||||
assert str(error.detail[0]) == 'message1'
|
||||
assert str(error.detail[1]) == 'message2'
|
||||
|
|
Loading…
Reference in New Issue
Block a user