From 5c995dcfc251b55284e1ef16545acd2acad6be04 Mon Sep 17 00:00:00 2001 From: Andriy Sokolovskiy Date: Fri, 13 Feb 2015 16:21:33 +0200 Subject: [PATCH] Fixed #24320 - Used field.value_to_string() in serialization of foreign key. This fixes serialization of a ForeignKey to a UUIDField as the test indicates. --- django/core/serializers/python.py | 2 ++ tests/serializers_regress/models.py | 4 ++++ tests/serializers_regress/tests.py | 22 ++++++++++++---------- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py index 137dfc134e..0b18f91858 100644 --- a/django/core/serializers/python.py +++ b/django/core/serializers/python.py @@ -63,6 +63,8 @@ class Serializer(base.Serializer): value = None else: value = getattr(obj, field.get_attname()) + if not is_protected_type(value): + value = field.value_to_string(obj) self._current[field.name] = value def handle_m2m_field(self, obj, field): diff --git a/tests/serializers_regress/models.py b/tests/serializers_regress/models.py index 3be5d6b2f8..67cf0dddad 100644 --- a/tests/serializers_regress/models.py +++ b/tests/serializers_regress/models.py @@ -276,6 +276,10 @@ class UUIDData(models.Model): data = models.UUIDField(primary_key=True) +class FKToUUID(models.Model): + data = models.ForeignKey(UUIDData) + + class ComplexModel(models.Model): field1 = models.CharField(max_length=10) field2 = models.CharField(max_length=10) diff --git a/tests/serializers_regress/tests.py b/tests/serializers_regress/tests.py index e00d68aa3c..e98a721818 100644 --- a/tests/serializers_regress/tests.py +++ b/tests/serializers_regress/tests.py @@ -28,15 +28,15 @@ from .models import ( BooleanData, BooleanPKData, CharData, CharPKData, ComplexModel, DateData, DateTimeData, DecimalData, DecimalPKData, EmailData, EmailPKData, ExplicitInheritBaseModel, FileData, FilePathData, FilePathPKData, FKData, - FKDataNaturalKey, FKDataToField, FKDataToO2O, FKSelfData, FloatData, - FloatPKData, GenericData, GenericIPAddressData, GenericIPAddressPKData, - InheritAbstractModel, InheritBaseModel, IntegerData, IntegerPKData, - Intermediate, LengthModel, M2MData, M2MIntermediateData, M2MSelfData, - ModifyingSaveData, NaturalKeyAnchor, NullBooleanData, O2OData, - PositiveIntegerData, PositiveIntegerPKData, PositiveSmallIntegerData, - PositiveSmallIntegerPKData, ProxyBaseModel, ProxyProxyBaseModel, SlugData, - SlugPKData, SmallData, SmallPKData, Tag, TextData, TimeData, UniqueAnchor, - UUIDData, + FKDataNaturalKey, FKDataToField, FKDataToO2O, FKSelfData, FKToUUID, + FloatData, FloatPKData, GenericData, GenericIPAddressData, + GenericIPAddressPKData, InheritAbstractModel, InheritBaseModel, + IntegerData, IntegerPKData, Intermediate, LengthModel, M2MData, + M2MIntermediateData, M2MSelfData, ModifyingSaveData, NaturalKeyAnchor, + NullBooleanData, O2OData, PositiveIntegerData, PositiveIntegerPKData, + PositiveSmallIntegerData, PositiveSmallIntegerPKData, ProxyBaseModel, + ProxyProxyBaseModel, SlugData, SlugPKData, SmallData, SmallPKData, Tag, + TextData, TimeData, UniqueAnchor, UUIDData, ) try: @@ -201,6 +201,7 @@ im_obj = (im_create, im_compare) o2o_obj = (o2o_create, o2o_compare) pk_obj = (pk_create, pk_compare) inherited_obj = (inherited_create, inherited_compare) +uuid_obj = uuid.uuid4() test_data = [ # Format: (data type, PK value, Model Class, data) @@ -356,7 +357,8 @@ The end."""), # The end."""), # (pk_obj, 770, TimePKData, datetime.time(10, 42, 37)), # (pk_obj, 790, XMLPKData, ""), - (pk_obj, 791, UUIDData, uuid.uuid4()), + (pk_obj, 791, UUIDData, uuid_obj), + (fk_obj, 792, FKToUUID, uuid_obj), (data_obj, 800, AutoNowDateTimeData, datetime.datetime(2006, 6, 16, 10, 42, 37)), (data_obj, 810, ModifyingSaveData, 42),