Преглед на файлове

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.
Andriy Sokolovskiy преди 10 години
родител
ревизия
5c995dcfc2
променени са 3 файла, в които са добавени 18 реда и са изтрити 10 реда
  1. 2 0
      django/core/serializers/python.py
  2. 4 0
      tests/serializers_regress/models.py
  3. 12 10
      tests/serializers_regress/tests.py

+ 2 - 0
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):

+ 4 - 0
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)

+ 12 - 10
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, "<foo></foo>"),
-    (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),