[1.7.x] Fixed #23987 -- Made SQLite SchemaEditor always use effective_default().
Backport of 089047331d
from master
This commit is contained in:
parent
eb632bfba5
commit
1690b92b0d
|
@ -69,8 +69,8 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
# Add in any created fields
|
# Add in any created fields
|
||||||
for field in create_fields:
|
for field in create_fields:
|
||||||
body[field.name] = field
|
body[field.name] = field
|
||||||
# If there's a default, insert it into the copy map
|
# Choose a default and insert it into the copy map
|
||||||
if field.has_default():
|
if not isinstance(field, ManyToManyField):
|
||||||
mapping[field.column] = self.quote_value(
|
mapping[field.column] = self.quote_value(
|
||||||
self.effective_default(field)
|
self.effective_default(field)
|
||||||
)
|
)
|
||||||
|
|
|
@ -135,3 +135,8 @@ Bugfixes
|
||||||
growth in Django's own test suite (:ticket:`23969`).
|
growth in Django's own test suite (:ticket:`23969`).
|
||||||
|
|
||||||
* Fixed timesince filter translations in Korean (:ticket:`23989`).
|
* Fixed timesince filter translations in Korean (:ticket:`23989`).
|
||||||
|
|
||||||
|
* Fixed the SQLite ``SchemaEditor`` to properly add defaults in the absence of
|
||||||
|
a user specified ``default``. For example, a ``CharField`` with ``blank=True``
|
||||||
|
didn't set existing rows to an empty string which resulted in a crash when
|
||||||
|
adding the ``NOT NULL`` constraint (:ticket:`23987`).
|
||||||
|
|
|
@ -1180,3 +1180,27 @@ class SchemaTests(TransactionTestCase):
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
editor.alter_field(model, get_field(Author, field_class=ForeignKey), field)
|
editor.alter_field(model, get_field(Author, field_class=ForeignKey), field)
|
||||||
|
|
||||||
|
def test_add_field_use_effective_default(self):
|
||||||
|
"""
|
||||||
|
#23987 - effective_default() should be used as the field default when
|
||||||
|
adding a new field.
|
||||||
|
"""
|
||||||
|
# Create the table
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.create_model(Author)
|
||||||
|
# Ensure there's no surname field
|
||||||
|
columns = self.column_classes(Author)
|
||||||
|
self.assertNotIn("surname", columns)
|
||||||
|
# Create a row
|
||||||
|
Author.objects.create(name='Anonymous1')
|
||||||
|
# Add new CharField to ensure default will be used from effective_default
|
||||||
|
new_field = CharField(max_length=15, blank=True)
|
||||||
|
new_field.set_attributes_from_name("surname")
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.add_field(Author, new_field)
|
||||||
|
# Ensure field was added with the right default
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
cursor.execute("SELECT surname FROM schema_author;")
|
||||||
|
item = cursor.fetchall()[0]
|
||||||
|
self.assertEqual(item[0], '')
|
||||||
|
|
Loading…
Reference in New Issue