1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Fixed #32425 -- Fixed adding nullable field with default on MySQL.

Thanks Simon Charette for the review.
This commit is contained in:
Jordan Bae
2021-02-07 01:01:34 +09:00
committed by Mariusz Felisiak
parent b99d6c9cbc
commit d4ac23bee1
4 changed files with 37 additions and 1 deletions

View File

@@ -3095,6 +3095,33 @@ class SchemaTests(TransactionTestCase):
if connection.features.can_introspect_default:
self.assertIsNone(field.default)
def test_add_field_default_nullable(self):
with connection.schema_editor() as editor:
editor.create_model(Author)
# Add new nullable CharField with a default.
new_field = CharField(max_length=15, blank=True, null=True, default='surname')
new_field.set_attributes_from_name('surname')
with connection.schema_editor() as editor:
editor.add_field(Author, new_field)
Author.objects.create(name='Anonymous1')
with connection.cursor() as cursor:
cursor.execute('SELECT surname FROM schema_author;')
item = cursor.fetchall()[0]
self.assertIsNone(item[0])
field = next(
f
for f in connection.introspection.get_table_description(
cursor,
'schema_author',
)
if f.name == 'surname'
)
# Field is still nullable.
self.assertTrue(field.null_ok)
# The database default is no longer set.
if connection.features.can_introspect_default:
self.assertIn(field.default, ['NULL', None])
def test_alter_field_default_dropped(self):
# Create the table
with connection.schema_editor() as editor: