Loading django/db/backends/mysql/schema.py +2 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): super(DatabaseSchemaEditor, self).add_field(model, field) # Simulate the effect of a one-off default. if self.skip_default(field) and field.default not in {None, NOT_PROVIDED}: # field.default may be unhashable, so a set isn't used for "in" check. if self.skip_default(field) and field.default not in (None, NOT_PROVIDED): effective_default = self.effective_default(field) self.execute('UPDATE %(table)s SET %(column)s = %%s' % { 'table': self.quote_name(model._meta.db_table), Loading docs/releases/1.8.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -29,3 +29,6 @@ Bugfixes * Alphabetized ordering of imports in ``from django.db import migrations, models`` statement in newly created migrations (:ticket:`25384`). * Fixed migrations crash on MySQL when adding a text or a blob field with an unhashable default (:ticket:`25393`). docs/spelling_wordlist +1 −0 Original line number Diff line number Diff line Loading @@ -695,6 +695,7 @@ unescaped ungrouped unhandled unharmful unhashable unicode uninstall uninstalling Loading tests/schema/tests.py +12 −0 Original line number Diff line number Diff line Loading @@ -1535,3 +1535,15 @@ class SchemaTests(TransactionTestCase): cursor.execute("SELECT surname FROM schema_author;") item = cursor.fetchall()[0] self.assertEqual(item[0], None if connection.features.interprets_empty_strings_as_nulls else '') def test_add_textfield_unhashable_default(self): # Create the table with connection.schema_editor() as editor: editor.create_model(Author) # Create a row Author.objects.create(name='Anonymous1') # Create a field that has an unhashable default new_field = TextField(default={}) new_field.set_attributes_from_name("info") with connection.schema_editor() as editor: editor.add_field(Author, new_field) Loading
django/db/backends/mysql/schema.py +2 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): super(DatabaseSchemaEditor, self).add_field(model, field) # Simulate the effect of a one-off default. if self.skip_default(field) and field.default not in {None, NOT_PROVIDED}: # field.default may be unhashable, so a set isn't used for "in" check. if self.skip_default(field) and field.default not in (None, NOT_PROVIDED): effective_default = self.effective_default(field) self.execute('UPDATE %(table)s SET %(column)s = %%s' % { 'table': self.quote_name(model._meta.db_table), Loading
docs/releases/1.8.5.txt +3 −0 Original line number Diff line number Diff line Loading @@ -29,3 +29,6 @@ Bugfixes * Alphabetized ordering of imports in ``from django.db import migrations, models`` statement in newly created migrations (:ticket:`25384`). * Fixed migrations crash on MySQL when adding a text or a blob field with an unhashable default (:ticket:`25393`).
docs/spelling_wordlist +1 −0 Original line number Diff line number Diff line Loading @@ -695,6 +695,7 @@ unescaped ungrouped unhandled unharmful unhashable unicode uninstall uninstalling Loading
tests/schema/tests.py +12 −0 Original line number Diff line number Diff line Loading @@ -1535,3 +1535,15 @@ class SchemaTests(TransactionTestCase): cursor.execute("SELECT surname FROM schema_author;") item = cursor.fetchall()[0] self.assertEqual(item[0], None if connection.features.interprets_empty_strings_as_nulls else '') def test_add_textfield_unhashable_default(self): # Create the table with connection.schema_editor() as editor: editor.create_model(Author) # Create a row Author.objects.create(name='Anonymous1') # Create a field that has an unhashable default new_field = TextField(default={}) new_field.set_attributes_from_name("info") with connection.schema_editor() as editor: editor.add_field(Author, new_field)