summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/backends/base/schema.py6
-rw-r--r--docs/releases/5.0.2.txt4
-rw-r--r--tests/schema/tests.py13
3 files changed, 22 insertions, 1 deletions
diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py
index ebd3726e65..ff0f2bba75 100644
--- a/django/db/backends/base/schema.py
+++ b/django/db/backends/base/schema.py
@@ -412,7 +412,11 @@ class BaseDatabaseSchemaEditor:
"""Return the sql and params for the field's database default."""
from django.db.models.expressions import Value
- sql = "%s" if isinstance(field.db_default, Value) else "(%s)"
+ sql = (
+ self._column_default_sql(field)
+ if isinstance(field.db_default, Value)
+ else "(%s)"
+ )
query = Query(model=field.model)
compiler = query.get_compiler(connection=self.connection)
default_sql, params = compiler.compile(field.db_default)
diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt
index 64ffcb88bd..a385fbd13e 100644
--- a/docs/releases/5.0.2.txt
+++ b/docs/releases/5.0.2.txt
@@ -32,3 +32,7 @@ Bugfixes
* Fixed a regression in Django 5.0 that caused the ``request_finished`` signal to
sometimes not be fired when running Django through an ASGI server, resulting
in potential resource leaks (:ticket:`35059`).
+
+* Fixed a bug in Django 5.0 that caused a migration crash on MySQL when adding
+ a ``BinaryField``, ``TextField``, ``JSONField``, or ``GeometryField`` with a
+ ``db_default`` (:ticket:`35162`).
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index a16c4a6bfe..eeaa46af06 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -2306,6 +2306,19 @@ class SchemaTests(TransactionTestCase):
columns = self.column_classes(Author)
self.assertEqual(columns["birth_year"][1].default, "1988")
+ @isolate_apps("schema")
+ def test_add_text_field_with_db_default(self):
+ class Author(Model):
+ description = TextField(db_default="(missing)")
+
+ class Meta:
+ app_label = "schema"
+
+ with connection.schema_editor() as editor:
+ editor.create_model(Author)
+ columns = self.column_classes(Author)
+ self.assertIn("(missing)", columns["description"][1].default)
+
@skipUnlessDBFeature(
"supports_column_check_constraints", "can_introspect_check_constraints"
)