mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[4.2.x] Fixed #34320 -- Make sure constraints names are obtained from truncated columns names.
Backport of 6bdc3c58b6 from main
			
			
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							ce10686604
						
					
				
				
					commit
					3b09f35558
				
			| @@ -13,6 +13,7 @@ from django.db import ( | ||||
|     OperationalError, | ||||
|     connection, | ||||
| ) | ||||
| from django.db.backends.utils import truncate_name | ||||
| from django.db.models import ( | ||||
|     CASCADE, | ||||
|     PROTECT, | ||||
| @@ -2072,6 +2073,36 @@ class SchemaTests(TransactionTestCase): | ||||
|         with self.assertRaises(IntegrityError): | ||||
|             NoteRename.objects.create(detail_info=None) | ||||
|  | ||||
|     @isolate_apps("schema") | ||||
|     def test_rename_field_with_check_to_truncated_name(self): | ||||
|         class AuthorWithLongColumn(Model): | ||||
|             field_with_very_looooooong_name = PositiveIntegerField(null=True) | ||||
|  | ||||
|             class Meta: | ||||
|                 app_label = "schema" | ||||
|  | ||||
|         self.isolated_local_models = [AuthorWithLongColumn] | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.create_model(AuthorWithLongColumn) | ||||
|         old_field = AuthorWithLongColumn._meta.get_field( | ||||
|             "field_with_very_looooooong_name" | ||||
|         ) | ||||
|         new_field = PositiveIntegerField(null=True) | ||||
|         new_field.set_attributes_from_name("renamed_field_with_very_long_name") | ||||
|         with connection.schema_editor() as editor: | ||||
|             editor.alter_field(AuthorWithLongColumn, old_field, new_field, strict=True) | ||||
|  | ||||
|         new_field_name = truncate_name( | ||||
|             new_field.column, connection.ops.max_name_length() | ||||
|         ) | ||||
|         constraints = self.get_constraints(AuthorWithLongColumn._meta.db_table) | ||||
|         check_constraints = [ | ||||
|             name | ||||
|             for name, details in constraints.items() | ||||
|             if details["columns"] == [new_field_name] and details["check"] | ||||
|         ] | ||||
|         self.assertEqual(len(check_constraints), 1) | ||||
|  | ||||
|     def _test_m2m_create(self, M2MFieldClass): | ||||
|         """ | ||||
|         Tests M2M fields on models during creation | ||||
|   | ||||
		Reference in New Issue
	
	Block a user