mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-03 12:00:12 +03:00
move and extend error raising when determining serializers
This commit is contained in:
parent
529effdfc7
commit
37976b11fa
|
@ -1,11 +1,9 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.urlresolvers import get_script_prefix, resolve
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from rest_framework.compat import urlparse
|
|
||||||
from rest_framework import six
|
from rest_framework import six
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ConfigurationError
|
from rest_framework.exceptions import ConfigurationError
|
||||||
|
@ -54,8 +52,6 @@ class GenericRelatedField(serializers.WritableField):
|
||||||
def from_native(self, value):
|
def from_native(self, value):
|
||||||
# Get the serializer responsible for input resolving
|
# Get the serializer responsible for input resolving
|
||||||
serializer = self.determine_serializer_for_data(value)
|
serializer = self.determine_serializer_for_data(value)
|
||||||
if serializer is None:
|
|
||||||
raise ConfigurationError('Could not determine a valid serializer for value "%r"' % value)
|
|
||||||
serializer.initialize(self.parent, self.source)
|
serializer.initialize(self.parent, self.source)
|
||||||
import pdb
|
import pdb
|
||||||
pdb.set_trace()
|
pdb.set_trace()
|
||||||
|
@ -73,11 +69,18 @@ class GenericRelatedField(serializers.WritableField):
|
||||||
# While one could easily execute the "try" block within from_native and reduce operations, I consider the
|
# While one could easily execute the "try" block within from_native and reduce operations, I consider the
|
||||||
# concept of serializing is already very naive and vague, that's why I'd go for stringency with the deserialization
|
# concept of serializing is already very naive and vague, that's why I'd go for stringency with the deserialization
|
||||||
# process here.
|
# process here.
|
||||||
|
serializers = []
|
||||||
for serializer in six.itervalues(self.serializers):
|
for serializer in six.itervalues(self.serializers):
|
||||||
try:
|
try:
|
||||||
serializer.from_native(value)
|
serializer.from_native(value)
|
||||||
# Returns the first serializer that can handle the value without errors.
|
# Collects all serializers that can handle the input data.
|
||||||
return serializer
|
serializers.append(serializer)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
return None
|
# If no serializer found, raise error.
|
||||||
|
l = len(serializers)
|
||||||
|
if l < 1:
|
||||||
|
raise ConfigurationError('Could not determine a valid serializer for value "%r"' % value)
|
||||||
|
elif l > 1:
|
||||||
|
raise ConfigurationError('There were multiple serializers found for value "%r"' % value)
|
||||||
|
return serializers[0]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user