summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/base/schema.py8
-rw-r--r--tests/schema/tests.py17
2 files changed, 25 insertions, 0 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index ff0f2bba75..a319b5ecd5 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -1646,6 +1646,14 @@ class BaseDatabaseSchemaEditor:
):
old_kwargs.pop("to", None)
new_kwargs.pop("to", None)
+ # db_default can take many form but result in the same SQL.
+ if (
+ old_kwargs.get("db_default")
+ and new_kwargs.get("db_default")
+ and self.db_default_sql(old_field) == self.db_default_sql(new_field)
+ ):
+ old_kwargs.pop("db_default")
+ new_kwargs.pop("db_default")
return self.quote_name(old_field.column) != self.quote_name(
new_field.column
) or (old_path, old_args, old_kwargs) != (new_path, new_args, new_kwargs)
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index eeaa46af06..b240f26a0b 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -2319,6 +2319,23 @@ class SchemaTests(TransactionTestCase):
columns = self.column_classes(Author)
self.assertIn("(missing)", columns["description"][1].default)
+ @isolate_apps("schema")
+ def test_db_default_equivalent_sql_noop(self):
+ class Author(Model):
+ name = TextField(db_default=Value("foo"))
+
+ class Meta:
+ app_label = "schema"
+
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+
+ new_field = TextField(db_default="foo")
+ new_field.set_attributes_from_name("name")
+ new_field.model = Author
+ with connection.schema_editor() as editor, self.assertNumQueries(0):
+ editor.alter_field(Author, Author._meta.get_field("name"), new_field)
+
@skipUnlessDBFeature(
"supports_column_check_constraints", "can_introspect_check_constraints"
)