mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 21:10:13 +03:00
fix non_native_fields behaviour
non_native_fields assumed to be only in ModelSerializer
This commit is contained in:
parent
1f9a000b0f
commit
d31c12c21d
21
rest_framework/serializers.py
Normal file → Executable file
21
rest_framework/serializers.py
Normal file → Executable file
|
@ -346,13 +346,16 @@ class BaseSerializer(WritableField):
|
||||||
continue
|
continue
|
||||||
field.initialize(parent=self, field_name=field_name)
|
field.initialize(parent=self, field_name=field_name)
|
||||||
key = self.get_field_key(field_name)
|
key = self.get_field_key(field_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
value = field.field_to_native(obj, field_name)
|
value = field.field_to_native(obj, field_name)
|
||||||
except AttributeError:
|
except AttributeError as e:
|
||||||
if field_name in self.opts.non_native_fields:
|
# non_native_fields check is done only in ModelSerializer
|
||||||
|
if field_name in getattr(self.opts, 'non_native_fields', []):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
raise
|
raise e
|
||||||
|
|
||||||
method = getattr(self, 'transform_%s' % field_name, None)
|
method = getattr(self, 'transform_%s' % field_name, None)
|
||||||
if callable(method):
|
if callable(method):
|
||||||
value = method(obj, value)
|
value = method(obj, value)
|
||||||
|
@ -392,9 +395,6 @@ class BaseSerializer(WritableField):
|
||||||
Override default so that the serializer can be used as a nested field
|
Override default so that the serializer can be used as a nested field
|
||||||
across relationships.
|
across relationships.
|
||||||
"""
|
"""
|
||||||
if field_name in self.opts.non_native_fields:
|
|
||||||
return None
|
|
||||||
|
|
||||||
if self.write_only:
|
if self.write_only:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -907,6 +907,15 @@ class ModelSerializer(Serializer):
|
||||||
and not isinstance(field, Serializer):
|
and not isinstance(field, Serializer):
|
||||||
exclusions.remove(field_name)
|
exclusions.remove(field_name)
|
||||||
return exclusions
|
return exclusions
|
||||||
|
|
||||||
|
def field_to_native(self, obj, field_name):
|
||||||
|
"""
|
||||||
|
Add support to non_native_fields
|
||||||
|
"""
|
||||||
|
if field_name in self.opts.non_native_fields:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return super(ModelSerializer, self).field_to_native(obj, field_name)
|
||||||
|
|
||||||
def full_clean(self, instance):
|
def full_clean(self, instance):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user