mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-03 20:10:10 +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
|
||||
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.
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue
Block a user