[1.7.x] Fixed #23920 -- Fixed MySQL crash when adding blank=True to TextField.
Thanks wkornewald for the report and Markus Holtermann for review.
Backport of 765fa36d57
from master
This commit is contained in:
parent
e8c88c93ec
commit
d57124433f
|
@ -560,7 +560,7 @@ class BaseDatabaseSchemaEditor(object):
|
|||
# Default change?
|
||||
old_default = self.effective_default(old_field)
|
||||
new_default = self.effective_default(new_field)
|
||||
if old_default != new_default:
|
||||
if old_default != new_default and not self.skip_default(new_field):
|
||||
if new_default is None:
|
||||
actions.append((
|
||||
self.sql_alter_column_no_default % {
|
||||
|
|
|
@ -107,4 +107,7 @@ Bugfixes
|
|||
|
||||
* Prevented the
|
||||
:class:`~django.contrib.auth.middleware.SessionAuthenticationMiddleware` from
|
||||
setting a ``"Vary: Cookie"`` header on all responses.
|
||||
setting a ``"Vary: Cookie"`` header on all responses (:ticket:`23939`).
|
||||
|
||||
* Fixed a crash when adding ``blank=True`` to ``TextField()`` on MySQL
|
||||
(:ticket:`23920`).
|
||||
|
|
|
@ -171,3 +171,7 @@ class Thing(models.Model):
|
|||
|
||||
def __str__(self):
|
||||
return self.when
|
||||
|
||||
|
||||
class Note(models.Model):
|
||||
info = models.TextField()
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.db.transaction import atomic
|
|||
from .models import (Author, AuthorWithDefaultHeight, AuthorWithM2M, Book, BookWithLongName,
|
||||
BookWithSlug, BookWithM2M, Tag, TagIndexed, TagM2MTest, TagUniqueRename,
|
||||
UniqueTest, Thing, TagThrough, BookWithM2MThrough, AuthorTag, AuthorWithM2MThrough,
|
||||
AuthorWithEvenLongerName, BookWeak)
|
||||
AuthorWithEvenLongerName, BookWeak, Note)
|
||||
|
||||
|
||||
class SchemaTests(TransactionTestCase):
|
||||
|
@ -423,6 +423,19 @@ class SchemaTests(TransactionTestCase):
|
|||
self.assertEqual(columns['name'][0], "TextField")
|
||||
self.assertEqual(bool(columns['name'][1][6]), False)
|
||||
|
||||
def test_alter_text_field(self):
|
||||
# Regression for "BLOB/TEXT column 'info' can't have a default value")
|
||||
# on MySQL.
|
||||
new_field = TextField(blank=True)
|
||||
new_field.set_attributes_from_name("info")
|
||||
with connection.schema_editor() as editor:
|
||||
editor.alter_field(
|
||||
Note,
|
||||
Note._meta.get_field_by_name("info")[0],
|
||||
new_field,
|
||||
strict=True,
|
||||
)
|
||||
|
||||
def test_alter_null_to_not_null(self):
|
||||
"""
|
||||
#23609 - Tests handling of default values when altering from NULL to NOT NULL.
|
||||
|
|
Loading…
Reference in New Issue