diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index 9c61b1ff17..a311dc432e 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -671,13 +671,14 @@ class BaseDatabaseSchemaEditor: sql.rename_table_references(old_db_table, new_db_table) def alter_db_table_comment(self, model, old_db_table_comment, new_db_table_comment): - self.execute( - self.sql_alter_table_comment - % { - "table": self.quote_name(model._meta.db_table), - "comment": self.quote_value(new_db_table_comment or ""), - } - ) + if self.sql_alter_table_comment and self.connection.features.supports_comments: + self.execute( + self.sql_alter_table_comment + % { + "table": self.quote_name(model._meta.db_table), + "comment": self.quote_value(new_db_table_comment or ""), + } + ) def alter_db_tablespace(self, model, old_db_tablespace, new_db_tablespace): """Move a model's table between tablespaces.""" diff --git a/django/db/backends/sqlite3/schema.py b/django/db/backends/sqlite3/schema.py index 243430a535..c25c9532de 100644 --- a/django/db/backends/sqlite3/schema.py +++ b/django/db/backends/sqlite3/schema.py @@ -19,6 +19,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s" sql_create_unique = "CREATE UNIQUE INDEX %(name)s ON %(table)s (%(columns)s)" sql_delete_unique = "DROP INDEX %(name)s" + sql_alter_table_comment = None + sql_alter_column_comment = None def __enter__(self): # Some SQLite schema alterations need foreign key constraints to be diff --git a/docs/releases/4.2.8.txt b/docs/releases/4.2.8.txt index 0550e026bb..1cce9030ec 100644 --- a/docs/releases/4.2.8.txt +++ b/docs/releases/4.2.8.txt @@ -35,3 +35,6 @@ Bugfixes * Fixed a regression in Django 4.2 where the admin's read-only password widget and some help texts were incorrectly aligned at tablet widths (:ticket:`34982`). + +* Fixed a regression in Django 4.2 that caused a migration crash on SQLite when + altering unsupported ``Meta.db_table_comment`` (:ticket:`35006`). diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 0738026a31..a37b49b31d 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -4870,6 +4870,23 @@ class SchemaTests(TransactionTestCase): [None, ""], ) + @isolate_apps("schema") + @skipIfDBFeature("supports_comments") + def test_db_comment_table_unsupported(self): + class ModelWithDbTableComment(Model): + class Meta: + app_label = "schema" + db_table_comment = "Custom table comment" + + # Table comments are ignored on databases that don't support them. + with connection.schema_editor() as editor, self.assertNumQueries(1): + editor.create_model(ModelWithDbTableComment) + self.isolated_local_models = [ModelWithDbTableComment] + with connection.schema_editor() as editor, self.assertNumQueries(0): + editor.alter_db_table_comment( + ModelWithDbTableComment, "Custom table comment", "New table comment" + ) + @isolate_apps("schema") @skipUnlessDBFeature("supports_comments", "supports_foreign_keys") def test_db_comments_from_abstract_model(self):