mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-12-04 15:34:05 +03:00
Ensure context is passed to dynamically added fields. Fixes #476.
This commit is contained in:
parent
9eaf8e4330
commit
39b01d6802
|
@ -171,10 +171,6 @@ class BaseSerializer(Field):
|
||||||
for key in self.opts.exclude:
|
for key in self.opts.exclude:
|
||||||
ret.pop(key, None)
|
ret.pop(key, None)
|
||||||
|
|
||||||
# Initialize the fields
|
|
||||||
for key, field in ret.items():
|
|
||||||
field.initialize(parent=self, field_name=key)
|
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
#####
|
#####
|
||||||
|
@ -214,6 +210,7 @@ class BaseSerializer(Field):
|
||||||
ret.fields = {}
|
ret.fields = {}
|
||||||
|
|
||||||
for field_name, field in self.fields.items():
|
for field_name, field in self.fields.items():
|
||||||
|
field.initialize(parent=self, field_name=field_name)
|
||||||
key = self.get_field_key(field_name)
|
key = self.get_field_key(field_name)
|
||||||
value = field.field_to_native(obj, field_name)
|
value = field.field_to_native(obj, field_name)
|
||||||
ret[key] = value
|
ret[key] = value
|
||||||
|
@ -227,6 +224,7 @@ class BaseSerializer(Field):
|
||||||
"""
|
"""
|
||||||
reverted_data = {}
|
reverted_data = {}
|
||||||
for field_name, field in self.fields.items():
|
for field_name, field in self.fields.items():
|
||||||
|
field.initialize(parent=self, field_name=field_name)
|
||||||
try:
|
try:
|
||||||
field.field_from_native(data, files, field_name, reverted_data)
|
field.field_from_native(data, files, field_name, reverted_data)
|
||||||
except ValidationError as err:
|
except ValidationError as err:
|
||||||
|
@ -407,7 +405,6 @@ class ModelSerializer(Serializer):
|
||||||
field = self.get_field(model_field)
|
field = self.get_field(model_field)
|
||||||
|
|
||||||
if field:
|
if field:
|
||||||
field.initialize(parent=self, field_name=model_field.name)
|
|
||||||
ret[model_field.name] = field
|
ret[model_field.name] = field
|
||||||
|
|
||||||
for field_name in self.opts.read_only_fields:
|
for field_name in self.opts.read_only_fields:
|
||||||
|
|
|
@ -149,7 +149,6 @@ class IntegrationTestPaginationAndFiltering(TestCase):
|
||||||
|
|
||||||
|
|
||||||
class PassOnContextPaginationSerializer(pagination.PaginationSerializer):
|
class PassOnContextPaginationSerializer(pagination.PaginationSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
object_serializer_class = serializers.Serializer
|
object_serializer_class = serializers.Serializer
|
||||||
|
|
||||||
|
@ -179,9 +178,12 @@ class UnitTestPagination(TestCase):
|
||||||
self.assertEquals(serializer.data['results'], self.objects[20:])
|
self.assertEquals(serializer.data['results'], self.objects[20:])
|
||||||
|
|
||||||
def test_context_available_in_result(self):
|
def test_context_available_in_result(self):
|
||||||
|
"""
|
||||||
|
Ensure context gets passed through to the object serializer.
|
||||||
|
"""
|
||||||
serializer = PassOnContextPaginationSerializer(self.first_page)
|
serializer = PassOnContextPaginationSerializer(self.first_page)
|
||||||
|
serializer.data
|
||||||
results = serializer.fields[serializer.results_field]
|
results = serializer.fields[serializer.results_field]
|
||||||
# assertIs is available in Python 2.7
|
|
||||||
self.assertTrue(serializer.context is results.context)
|
self.assertTrue(serializer.context is results.context)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user