mirror of https://github.com/django/django.git
Fixed #33408 -- Fixed adding nullable unique fields on SQLite.
Regression in 2f73e5406d
.
Thanks Alan Crosswell for the report.
This commit is contained in:
parent
0ab58c1209
commit
30613d6a74
|
@ -324,10 +324,15 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
|
||||||
|
|
||||||
def add_field(self, model, field):
|
def add_field(self, model, field):
|
||||||
"""Create a field on a model."""
|
"""Create a field on a model."""
|
||||||
# Fields with default values cannot by handled by ALTER TABLE ADD
|
if (
|
||||||
# COLUMN statement because DROP DEFAULT is not supported in
|
# Primary keys and unique fields are not supported in ALTER TABLE
|
||||||
# ALTER TABLE.
|
# ADD COLUMN.
|
||||||
if not field.null or self.effective_default(field) is not None:
|
field.primary_key or field.unique or
|
||||||
|
# Fields with default values cannot by handled by ALTER TABLE ADD
|
||||||
|
# COLUMN statement because DROP DEFAULT is not supported in
|
||||||
|
# ALTER TABLE.
|
||||||
|
not field.null or self.effective_default(field) is not None
|
||||||
|
):
|
||||||
self._remake_table(model, create_field=field)
|
self._remake_table(model, create_field=field)
|
||||||
else:
|
else:
|
||||||
super().add_field(model, field)
|
super().add_field(model, field)
|
||||||
|
|
|
@ -624,6 +624,18 @@ class SchemaTests(TransactionTestCase):
|
||||||
# Make sure the values were transformed correctly
|
# Make sure the values were transformed correctly
|
||||||
self.assertEqual(Author.objects.extra(where=["thing = 1"]).count(), 2)
|
self.assertEqual(Author.objects.extra(where=["thing = 1"]).count(), 2)
|
||||||
|
|
||||||
|
def test_add_field_o2o_nullable(self):
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.create_model(Author)
|
||||||
|
editor.create_model(Note)
|
||||||
|
new_field = OneToOneField(Note, CASCADE, null=True)
|
||||||
|
new_field.set_attributes_from_name('note')
|
||||||
|
with connection.schema_editor() as editor:
|
||||||
|
editor.add_field(Author, new_field)
|
||||||
|
columns = self.column_classes(Author)
|
||||||
|
self.assertIn('note_id', columns)
|
||||||
|
self.assertTrue(columns['note_id'][1][6])
|
||||||
|
|
||||||
def test_add_field_binary(self):
|
def test_add_field_binary(self):
|
||||||
"""
|
"""
|
||||||
Tests binary fields get a sane default (#22851)
|
Tests binary fields get a sane default (#22851)
|
||||||
|
|
Loading…
Reference in New Issue