Skip to content

Commit 410ab91

Browse files
committed
make SchemaEditor.alter_field() populate default on NULL to NOT NULL change
1 parent 167b0b6 commit 410ab91

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

django_mongodb/features.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,12 @@ class DatabaseFeatures(BaseDatabaseFeatures):
100100
# AlterField
101101
"schema.tests.SchemaTests.test_alter_auto_field_to_integer_field",
102102
"schema.tests.SchemaTests.test_alter_field_add_index_to_integerfield",
103-
"schema.tests.SchemaTests.test_alter_field_default_dropped",
104103
"schema.tests.SchemaTests.test_alter_field_fk_keeps_index",
105104
"schema.tests.SchemaTests.test_alter_field_fk_to_o2o",
106105
"schema.tests.SchemaTests.test_alter_field_o2o_keeps_unique",
107106
"schema.tests.SchemaTests.test_alter_field_o2o_to_fk",
108107
"schema.tests.SchemaTests.test_alter_int_pk_to_int_unique",
109108
"schema.tests.SchemaTests.test_alter_not_unique_field_to_primary_key",
110-
"schema.tests.SchemaTests.test_alter_null_to_not_null",
111109
"schema.tests.SchemaTests.test_alter_primary_key_the_same_name",
112110
"schema.tests.SchemaTests.test_autofield_to_o2o",
113111
# AlterField (db_index)

django_mongodb/schema.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,16 @@ def _alter_field(
3838
new_db_params,
3939
strict=False,
4040
):
41+
collection = self.connection.database[model._meta.db_table]
4142
# Have they renamed the column?
4243
if old_field.column != new_field.column:
43-
self.connection.database[model._meta.db_table].update_many(
44-
{}, {"$rename": {old_field.column: new_field.column}}
45-
)
44+
collection.update_many({}, {"$rename": {old_field.column: new_field.column}})
45+
# Replace NULL with the field default if the field and was changed from
46+
# NULL to NOT NULL.
47+
if new_field.has_default() and old_field.null and not new_field.null:
48+
column = new_field.column
49+
default = self.effective_default(new_field)
50+
collection.update_many({column: {"$eq": None}}, [{"$set": {column: default}}])
4651

4752
def remove_field(self, model, field):
4853
# Remove implicit M2M tables.

0 commit comments

Comments
 (0)