فهرست منبع

Fixed #34568 -- Made makemigrations --update respect --name option.

Thanks David Sanders for the report.
Mariusz Felisiak 1 سال پیش
والد
کامیت
c52f4295f2
4فایلهای تغییر یافته به همراه34 افزوده شده و 3 حذف شده
  1. 2 3
      django/core/management/commands/makemigrations.py
  2. 3 0
      docs/ref/django-admin.txt
  3. 3 0
      docs/releases/4.2.2.txt
  4. 26 0
      tests/migrations/test_commands.py

+ 2 - 3
django/core/management/commands/makemigrations.py

@@ -316,9 +316,8 @@ class Command(BaseCommand):
             )
             # Update name.
             previous_migration_path = MigrationWriter(leaf_migration).path
-            suggested_name = (
-                leaf_migration.name[:4] + "_" + leaf_migration.suggest_name()
-            )
+            name_fragment = self.migration_name or leaf_migration.suggest_name()
+            suggested_name = leaf_migration.name[:4] + f"_{name_fragment}"
             if leaf_migration.name == suggested_name:
                 new_name = leaf_migration.name + "_updated"
             else:

+ 3 - 0
docs/ref/django-admin.txt

@@ -757,6 +757,9 @@ generated migration files to ``stdout``.
 Merges model changes into the latest migration and optimize the resulting
 operations.
 
+The updated migration will have a generated name. In order to preserve the
+previous name, set it using ``--name``.
+
 ``migrate``
 -----------
 

+ 3 - 0
docs/releases/4.2.2.txt

@@ -19,3 +19,6 @@ Bugfixes
 * Fixed a regression in Django 4.2 that caused a crash of ``QuerySet.defer()``
   when passing a ``ManyToManyField`` or ``GenericForeignKey`` reference. While
   doing so is a no-op, it was allowed in older version (:ticket:`34570`).
+
+* Fixed a bug in Django 4.2 where :option:`makemigrations --update` didn't
+  respect the ``--name`` option (:ticket:`34568`).

+ 26 - 0
tests/migrations/test_commands.py

@@ -2655,6 +2655,32 @@ class MakeMigrationsTests(MigrationTestBase):
                 self.assertNotEqual(initial_content, fp.read())
             self.assertIn(f"Deleted {migration_file}", out.getvalue())
 
+    def test_makemigrations_update_custom_name(self):
+        custom_name = "delete_something"
+        with self.temporary_migration_module(
+            module="migrations.test_migrations"
+        ) as migration_dir:
+            old_migration_file = os.path.join(migration_dir, "0002_second.py")
+            with open(old_migration_file) as fp:
+                initial_content = fp.read()
+
+            with captured_stdout() as out:
+                call_command(
+                    "makemigrations", "migrations", update=True, name=custom_name
+                )
+            self.assertFalse(
+                any(
+                    filename.startswith("0003")
+                    for filename in os.listdir(migration_dir)
+                )
+            )
+            self.assertIs(os.path.exists(old_migration_file), False)
+            new_migration_file = os.path.join(migration_dir, f"0002_{custom_name}.py")
+            self.assertIs(os.path.exists(new_migration_file), True)
+            with open(new_migration_file) as fp:
+                self.assertNotEqual(initial_content, fp.read())
+            self.assertIn(f"Deleted {old_migration_file}", out.getvalue())
+
     def test_makemigrations_update_applied_migration(self):
         recorder = MigrationRecorder(connection)
         recorder.record_applied("migrations", "0001_initial")