From e8252fc4451ee2c05779b28e74417174f0a2eeef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Intrieri?= <81313286+n-borges@users.noreply.github.com> Date: Tue, 18 Jul 2023 05:27:40 +0200 Subject: [PATCH] Fixed #34716 -- Fixed serialization of nested class methods in migrations. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò <nicolo.intrieri@spinforward.it> --- django/db/migrations/serializer.py | 2 +- tests/migrations/test_writer.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/django/db/migrations/serializer.py b/django/db/migrations/serializer.py index d88cda6e20..06657ebaab 100644 --- a/django/db/migrations/serializer.py +++ b/django/db/migrations/serializer.py @@ -168,7 +168,7 @@ class FunctionTypeSerializer(BaseSerializer): ): klass = self.value.__self__ module = klass.__module__ - return "%s.%s.%s" % (module, klass.__name__, self.value.__name__), { + return "%s.%s.%s" % (module, klass.__qualname__, self.value.__name__), { "import %s" % module } # Further error checking diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py index bef8f64061..5ee814d2af 100644 --- a/tests/migrations/test_writer.py +++ b/tests/migrations/test_writer.py @@ -211,6 +211,10 @@ class WriterTests(SimpleTestCase): X = "X", "X value" Y = "Y", "Y value" + @classmethod + def method(cls): + return cls.X + def safe_exec(self, string, value=None): d = {} try: @@ -468,6 +472,15 @@ class WriterTests(SimpleTestCase): ), ) + def test_serialize_nested_class_method(self): + self.assertSerializedResultEqual( + self.NestedChoices.method, + ( + "migrations.test_writer.WriterTests.NestedChoices.method", + {"import migrations.test_writer"}, + ), + ) + def test_serialize_uuid(self): self.assertSerializedEqual(uuid.uuid1()) self.assertSerializedEqual(uuid.uuid4())