mirror of
https://github.com/django/django.git
synced 2025-04-10 16:29:42 +00:00
[5.0.x] 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 7414704e88d73dafbcfbb85f9bc54cb6111439d3. Backport of dfc77637ea5c1aa81caa72b1cf900e6931d61b54 from main
This commit is contained in:
parent
741f080ab5
commit
3e7a30fb3a
@ -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)
|
||||
|
@ -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`).
|
||||
|
@ -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"
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user