Fixed #27914 -- Fixed serialization of nested classes in migrations.

This commit is contained in:
John Bowen 2019-11-22 12:43:03 +00:00 committed by Mariusz Felisiak
parent 8008795a38
commit 29d8198841
2 changed files with 17 additions and 1 deletions

View File

@ -269,7 +269,7 @@ class TypeSerializer(BaseSerializer):
if module == builtins.__name__:
return self.value.__name__, set()
else:
return "%s.%s" % (module, self.value.__name__), {"import %s" % module}
return "%s.%s" % (module, self.value.__qualname__), {"import %s" % module}
class UUIDSerializer(BaseSerializer):

View File

@ -193,6 +193,10 @@ class WriterTests(SimpleTestCase):
A = 1
B = 2
class NestedChoices(models.TextChoices):
X = 'X', 'X value'
Y = 'Y', 'Y value'
def safe_exec(self, string, value=None):
d = {}
try:
@ -388,6 +392,18 @@ class WriterTests(SimpleTestCase):
"default=datetime.date(1969, 11, 19))"
)
def test_serialize_nested_class(self):
for nested_cls in [self.NestedEnum, self.NestedChoices]:
cls_name = nested_cls.__name__
with self.subTest(cls_name):
self.assertSerializedResultEqual(
nested_cls,
(
"migrations.test_writer.WriterTests.%s" % cls_name,
{'import migrations.test_writer'},
),
)
def test_serialize_uuid(self):
self.assertSerializedEqual(uuid.uuid1())
self.assertSerializedEqual(uuid.uuid4())