mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 12:30:11 +03:00
Fixed the update of a 1-to-1 field while deserializing an object
This commit is contained in:
parent
a3e75e4c6c
commit
73b6943f82
|
@ -450,7 +450,11 @@ class BaseSerializer(WritableField):
|
||||||
into[(self.source or field_name)] = None
|
into[(self.source or field_name)] = None
|
||||||
else:
|
else:
|
||||||
# Set the serializer object if it exists
|
# Set the serializer object if it exists
|
||||||
|
try:
|
||||||
obj = get_component(self.parent.object, self.source or field_name) if self.parent.object else None
|
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
|
# If we have a model manager or similar object then we need
|
||||||
# to iterate through each instance.
|
# to iterate through each instance.
|
||||||
|
|
|
@ -345,3 +345,30 @@ class NestedModelSerializerUpdateTests(TestCase):
|
||||||
result = deserialize.object
|
result = deserialize.object
|
||||||
result.save()
|
result.save()
|
||||||
self.assertEqual(result.id, john.id)
|
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')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user