mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[4.1.x] Fixed #33953 -- Reverted "Fixed #33201 -- Made RenameModel operation a noop for models with db_table."
Regression inafeafd6036. This revertsafeafd6036. Thanks Timothy Thomas for the report. Backport of166a3b3263from main
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							c9ebd5b7aa
						
					
				
				
					commit
					7d5ccbbe1a
				
			| @@ -371,13 +371,12 @@ class RenameModel(ModelOperation): | |||||||
|         new_model = to_state.apps.get_model(app_label, self.new_name) |         new_model = to_state.apps.get_model(app_label, self.new_name) | ||||||
|         if self.allow_migrate_model(schema_editor.connection.alias, new_model): |         if self.allow_migrate_model(schema_editor.connection.alias, new_model): | ||||||
|             old_model = from_state.apps.get_model(app_label, self.old_name) |             old_model = from_state.apps.get_model(app_label, self.old_name) | ||||||
|             old_db_table = old_model._meta.db_table |  | ||||||
|             new_db_table = new_model._meta.db_table |  | ||||||
|             # Don't alter when a table name is not changed. |  | ||||||
|             if old_db_table == new_db_table: |  | ||||||
|                 return |  | ||||||
|             # Move the main table |             # Move the main table | ||||||
|             schema_editor.alter_db_table(new_model, old_db_table, new_db_table) |             schema_editor.alter_db_table( | ||||||
|  |                 new_model, | ||||||
|  |                 old_model._meta.db_table, | ||||||
|  |                 new_model._meta.db_table, | ||||||
|  |             ) | ||||||
|             # Alter the fields pointing to us |             # Alter the fields pointing to us | ||||||
|             for related_object in old_model._meta.related_objects: |             for related_object in old_model._meta.related_objects: | ||||||
|                 if related_object.related_model == old_model: |                 if related_object.related_model == old_model: | ||||||
|   | |||||||
| @@ -46,3 +46,6 @@ Bugfixes | |||||||
|  |  | ||||||
| * Fixed a migration crash on ``ManyToManyField`` fields with ``through`` | * Fixed a migration crash on ``ManyToManyField`` fields with ``through`` | ||||||
|   referencing models in different apps (:ticket:`33938`). |   referencing models in different apps (:ticket:`33938`). | ||||||
|  |  | ||||||
|  | * Fixed a regression in Django 4.1 that caused an incorrect migration when | ||||||
|  |   renaming a model with ``ManyToManyField`` and ``db_table`` (:ticket:`33953`). | ||||||
|   | |||||||
| @@ -1052,8 +1052,8 @@ class OperationTests(OperationTestBase): | |||||||
|             Pony._meta.get_field("riders").remote_field.through.objects.count(), 2 |             Pony._meta.get_field("riders").remote_field.through.objects.count(), 2 | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|     def test_rename_model_with_db_table_noop(self): |     def test_rename_model_with_db_table_rename_m2m(self): | ||||||
|         app_label = "test_rmwdbtn" |         app_label = "test_rmwdbrm2m" | ||||||
|         project_state = self.apply_operations( |         project_state = self.apply_operations( | ||||||
|             app_label, |             app_label, | ||||||
|             ProjectState(), |             ProjectState(), | ||||||
| @@ -1063,32 +1063,28 @@ class OperationTests(OperationTestBase): | |||||||
|                     fields=[ |                     fields=[ | ||||||
|                         ("id", models.AutoField(primary_key=True)), |                         ("id", models.AutoField(primary_key=True)), | ||||||
|                     ], |                     ], | ||||||
|                     options={"db_table": "rider"}, |  | ||||||
|                 ), |                 ), | ||||||
|                 migrations.CreateModel( |                 migrations.CreateModel( | ||||||
|                     "Pony", |                     "Pony", | ||||||
|                     fields=[ |                     fields=[ | ||||||
|                         ("id", models.AutoField(primary_key=True)), |                         ("id", models.AutoField(primary_key=True)), | ||||||
|                         ( |                         ("riders", models.ManyToManyField("Rider")), | ||||||
|                             "rider", |  | ||||||
|                             models.ForeignKey("%s.Rider" % app_label, models.CASCADE), |  | ||||||
|                         ), |  | ||||||
|                     ], |                     ], | ||||||
|  |                     options={"db_table": "pony"}, | ||||||
|                 ), |                 ), | ||||||
|             ], |             ], | ||||||
|         ) |         ) | ||||||
|         new_state = project_state.clone() |         new_state = project_state.clone() | ||||||
|         operation = migrations.RenameModel("Rider", "Runner") |         operation = migrations.RenameModel("Pony", "PinkPony") | ||||||
|         operation.state_forwards(app_label, new_state) |         operation.state_forwards(app_label, new_state) | ||||||
|  |         with connection.schema_editor() as editor: | ||||||
|  |             operation.database_forwards(app_label, editor, project_state, new_state) | ||||||
|  |  | ||||||
|         with connection.schema_editor() as editor: |         Pony = new_state.apps.get_model(app_label, "PinkPony") | ||||||
|             with self.assertNumQueries(0): |         Rider = new_state.apps.get_model(app_label, "Rider") | ||||||
|                 operation.database_forwards(app_label, editor, project_state, new_state) |         pony = Pony.objects.create() | ||||||
|         with connection.schema_editor() as editor: |         rider = Rider.objects.create() | ||||||
|             with self.assertNumQueries(0): |         pony.riders.add(rider) | ||||||
|                 operation.database_backwards( |  | ||||||
|                     app_label, editor, new_state, project_state |  | ||||||
|                 ) |  | ||||||
|  |  | ||||||
|     def test_rename_m2m_target_model(self): |     def test_rename_m2m_target_model(self): | ||||||
|         app_label = "test_rename_m2m_target_model" |         app_label = "test_rename_m2m_target_model" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user