diff options
author | nabil-rady <midorady9999@gmail.com> | 2023-02-15 13:43:51 +0200 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-02-15 16:51:31 +0100 |
commit | 6bdc3c58b65eb32fd63cd41849f00a17a36b4473 (patch) | |
tree | f122cbfd001972475a4f5743646c96171e61e52e /tests/schema | |
parent | 3cc7a92189f45eab034661359e60ede4c88a6052 (diff) | |
download | django-6bdc3c58b65eb32fd63cd41849f00a17a36b4473.tar.gz |
Fixed #34320 -- Make sure constraints names are obtained from truncated columns names.
Diffstat (limited to 'tests/schema')
-rw-r--r-- | tests/schema/tests.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/schema/tests.py b/tests/schema/tests.py index bc603cb772..836b02f07f 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -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 |