mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #34984 -- Skipped GeneratedFields when remaking tables on SQLite.
Regression in f333e3513e8bdf5ffeb6eeb63021c230082e6f95.t Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com> Co-authored-by: David Sanders <shang.xiao.sanders@gmail.com>
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							0d407bcce5
						
					
				
				
					commit
					828082dad9
				
			| @@ -107,6 +107,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): | ||||
|         mapping = { | ||||
|             f.column: self.quote_name(f.column) | ||||
|             for f in model._meta.local_concrete_fields | ||||
|             if f.generated is False | ||||
|         } | ||||
|         # This maps field names (not columns) for things like unique_together | ||||
|         rename_mapping = {} | ||||
| @@ -163,7 +164,7 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): | ||||
|         # Remove any deleted fields | ||||
|         if delete_field: | ||||
|             del body[delete_field.name] | ||||
|             del mapping[delete_field.column] | ||||
|             mapping.pop(delete_field.column, None) | ||||
|             # Remove any implicit M2M tables | ||||
|             if ( | ||||
|                 delete_field.many_to_many | ||||
|   | ||||
| @@ -5801,6 +5801,42 @@ class OperationTests(OperationTestBase): | ||||
|     def test_remove_generated_field_virtual(self): | ||||
|         self._test_remove_generated_field(db_persist=False) | ||||
|  | ||||
|     @skipUnlessDBFeature("supports_stored_generated_columns") | ||||
|     def test_add_field_after_generated_field(self): | ||||
|         app_label = "test_adfagf" | ||||
|         project_state = self.set_up_test_model(app_label) | ||||
|         operation_1 = migrations.AddField( | ||||
|             "Pony", | ||||
|             "generated", | ||||
|             models.GeneratedField( | ||||
|                 expression=Value(1), | ||||
|                 output_field=models.IntegerField(), | ||||
|                 db_persist=True, | ||||
|             ), | ||||
|         ) | ||||
|         operation_2 = migrations.AddField( | ||||
|             "Pony", | ||||
|             "static", | ||||
|             models.IntegerField(default=2), | ||||
|         ) | ||||
|         new_state = project_state.clone() | ||||
|         operation_1.state_forwards(app_label, new_state) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation_1.database_forwards(app_label, editor, project_state, new_state) | ||||
|         project_state, new_state = new_state, new_state.clone() | ||||
|         pony_old = new_state.apps.get_model(app_label, "Pony").objects.create(weight=20) | ||||
|         self.assertEqual(pony_old.generated, 1) | ||||
|         operation_2.state_forwards(app_label, new_state) | ||||
|         with connection.schema_editor() as editor: | ||||
|             operation_2.database_forwards(app_label, editor, project_state, new_state) | ||||
|         Pony = new_state.apps.get_model(app_label, "Pony") | ||||
|         pony_old = Pony.objects.get(pk=pony_old.pk) | ||||
|         self.assertEqual(pony_old.generated, 1) | ||||
|         self.assertEqual(pony_old.static, 2) | ||||
|         pony_new = Pony.objects.create(weight=20) | ||||
|         self.assertEqual(pony_new.generated, 1) | ||||
|         self.assertEqual(pony_new.static, 2) | ||||
|  | ||||
|  | ||||
| class SwappableOperationTests(OperationTestBase): | ||||
|     """ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user