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())