summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2014-12-04 09:11:30 -0500
committerTim Graham <timograham@gmail.com>2014-12-04 10:59:05 -0500
commitd57124433f0d0f2bf61ea4e14962f3b663ab20c7 (patch)
tree9e6579d8c3d9a3bd6124f7b20dc2a58807abc921
parente8c88c93ecb9cedebee90d55acc8a42649720ae0 (diff)
[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 765fa36d57d08d0568438f6fd74521e7a56abb61 from master
-rw-r--r--django/db/backends/schema.py2
-rw-r--r--docs/releases/1.7.2.txt5
-rw-r--r--tests/schema/models.py4
-rw-r--r--tests/schema/tests.py15
4 files changed, 23 insertions, 3 deletions
diff --git a/django/db/backends/schema.py b/django/db/backends/schema.py
index 4fc6601dfd..06d7ad27bf 100644
--- a/django/db/backends/schema.py
+++ b/django/db/backends/schema.py
@@ -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 % {
diff --git a/docs/releases/1.7.2.txt b/docs/releases/1.7.2.txt
index 771e353818..e3db0d404e 100644
--- a/docs/releases/1.7.2.txt
+++ b/docs/releases/1.7.2.txt
@@ -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`).
diff --git a/tests/schema/models.py b/tests/schema/models.py
index 3139838b97..df8a1c5ce4 100644
--- a/tests/schema/models.py
+++ b/tests/schema/models.py
@@ -171,3 +171,7 @@ class Thing(models.Model):
def __str__(self):
return self.when
+
+
+class Note(models.Model):
+ info = models.TextField()
diff --git a/tests/schema/tests.py b/tests/schema/tests.py
index 4a7d537665..4c773599f9 100644
--- a/tests/schema/tests.py
+++ b/tests/schema/tests.py
@@ -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.