Fixed the update of a 1-to-1 field while deserializing an object

This commit is contained in:
Thierry Bastian 2014-06-05 16:01:53 +02:00
parent a3e75e4c6c
commit 73b6943f82
2 changed files with 32 additions and 1 deletions

View File

@ -450,7 +450,11 @@ class BaseSerializer(WritableField):
into[(self.source or field_name)] = None
else:
# Set the serializer object if it exists
obj = get_component(self.parent.object, self.source or field_name) if self.parent.object else None
try:
obj = get_component(self.parent.object, self.source or field_name) if self.parent.object else None
except:
# this can happen when updating a 1-to-1 field
obj = None
# If we have a model manager or similar object then we need
# to iterate through each instance.

View File

@ -345,3 +345,30 @@ class NestedModelSerializerUpdateTests(TestCase):
result = deserialize.object
result.save()
self.assertEqual(result.id, john.id)
class OneToOneNestedSerializerUpdateTests(TestCase):
def test_set_one_to_one_field(self):
class NullableOneToOneSourceSerializer(serializers.ModelSerializer):
class Meta:
model = models.NullableOneToOneSource
class OneToOneTargetSerializer(serializers.ModelSerializer):
class Meta:
model = models.OneToOneTarget
nullable_source = NullableOneToOneSourceSerializer()
target = models.OneToOneTarget.objects.create(name='foo')
data = {
'name': 'Discovery',
'nullable_source': {'name': 'Daft Punk'},
}
# create
serializer = OneToOneTargetSerializer(data=data, instance=target)
self.assertEqual(serializer.is_valid(), True)
target = serializer.save()
self.assertEqual(target.nullable_source.name, 'Daft Punk')