mirror of https://github.com/django/django.git
Fixed #35162 -- Fixed crash when adding fields with db_default on MySQL.
MySQL doesn't allow literal DEFAULT values to be used for BLOB, TEXT,
GEOMETRY or JSON columns and requires expression to be used instead.
Regression in 7414704e88
.
This commit is contained in:
parent
0630ca5725
commit
dfc77637ea
|
@ -412,7 +412,11 @@ class BaseDatabaseSchemaEditor:
|
||||||
"""Return the sql and params for the field's database default."""
|
"""Return the sql and params for the field's database default."""
|
||||||
from django.db.models.expressions import Value
|
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)
|
query = Query(model=field.model)
|
||||||
compiler = query.get_compiler(connection=self.connection)
|
compiler = query.get_compiler(connection=self.connection)
|
||||||
default_sql, params = compiler.compile(field.db_default)
|
default_sql, params = compiler.compile(field.db_default)
|
||||||
|
|
|
@ -32,3 +32,7 @@ Bugfixes
|
||||||
* Fixed a regression in Django 5.0 that caused the ``request_finished`` signal to
|
* 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
|
sometimes not be fired when running Django through an ASGI server, resulting
|
||||||
in potential resource leaks (:ticket:`35059`).
|
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`).
|
||||||
|
|
|
@ -2303,6 +2303,19 @@ class SchemaTests(TransactionTestCase):
|
||||||
columns = self.column_classes(Author)
|
columns = self.column_classes(Author)
|
||||||
self.assertEqual(columns["birth_year"][1].default, "1988")
|
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(
|
@skipUnlessDBFeature(
|
||||||
"supports_column_check_constraints", "can_introspect_check_constraints"
|
"supports_column_check_constraints", "can_introspect_check_constraints"
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue