Skip to content

Commit 4e16422

Browse files
committed
implement SchemaEditor.add/remove_field()
1 parent c7c9264 commit 4e16422

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed

django_mongodb/features.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -86,24 +86,6 @@ class DatabaseFeatures(BaseDatabaseFeatures):
8686
"backends.tests.ThreadTests.test_pass_connection_between_threads",
8787
"backends.tests.ThreadTests.test_closing_non_shared_connections",
8888
"backends.tests.ThreadTests.test_default_connection_thread_local",
89-
# AddField
90-
"schema.tests.SchemaTests.test_add_datefield_and_datetimefield_use_effective_default",
91-
"schema.tests.SchemaTests.test_add_field",
92-
"schema.tests.SchemaTests.test_add_field_binary",
93-
"schema.tests.SchemaTests.test_add_field_both_defaults_preserves_db_default",
94-
"schema.tests.SchemaTests.test_add_field_default_dropped",
95-
"schema.tests.SchemaTests.test_add_field_default_nullable",
96-
"schema.tests.SchemaTests.test_add_field_default_transform",
97-
"schema.tests.SchemaTests.test_add_field_durationfield_with_default",
98-
"schema.tests.SchemaTests.test_add_field_o2o_nullable",
99-
"schema.tests.SchemaTests.test_add_field_temp_default",
100-
"schema.tests.SchemaTests.test_add_field_temp_default_boolean",
101-
"schema.tests.SchemaTests.test_add_field_use_effective_default",
102-
"schema.tests.SchemaTests.test_add_text_field_with_db_default",
103-
"schema.tests.SchemaTests.test_add_textfield_default_nullable",
104-
# RemoveField
105-
"schema.tests.SchemaTests.test_remove_field",
106-
"schema.tests.SchemaTests.test_remove_indexed_field",
10789
# Add/RemoveIndex
10890
"schema.tests.SchemaTests.test_add_remove_index",
10991
"schema.tests.SchemaTests.test_composed_desc_index_with_fk",
@@ -145,12 +127,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
145127
"schema.tests.SchemaTests.test_remove_unique_together_does_not_remove_meta_constraints",
146128
"schema.tests.SchemaTests.test_unique_together",
147129
# ManyToManyField
148-
"schema.tests.SchemaTests.test_m2m",
149130
"schema.tests.SchemaTests.test_m2m_create",
150131
"schema.tests.SchemaTests.test_m2m_create_custom",
151132
"schema.tests.SchemaTests.test_m2m_create_inherited",
152-
"schema.tests.SchemaTests.test_m2m_custom",
153-
"schema.tests.SchemaTests.test_m2m_inherited",
154133
"schema.tests.SchemaTests.test_m2m_rename_field_in_target_model",
155134
"schema.tests.SchemaTests.test_m2m_repoint",
156135
"schema.tests.SchemaTests.test_m2m_repoint_custom",

django_mongodb/schema.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,27 @@ def delete_model(self, model):
99
self.connection.database[model._meta.db_table].drop()
1010

1111
def add_field(self, model, field):
12-
pass
12+
# Create implicit M2M tables.
13+
if field.many_to_many and field.remote_field.through._meta.auto_created:
14+
self.create_model(field.remote_field.through)
15+
return
16+
# Set default value on existing documents.
17+
if column := field.column:
18+
self.connection.database[model._meta.db_table].update_many(
19+
{}, [{"$set": {column: self.effective_default(field)}}]
20+
)
1321

1422
def alter_field(self, model, old_field, new_field, strict=False):
1523
pass
1624

1725
def remove_field(self, model, field):
18-
pass
26+
# Remove implicit M2M tables.
27+
if field.many_to_many and field.remote_field.through._meta.auto_created:
28+
self.delete_model(field.remote_field.through)
29+
return
30+
# Unset field on existing documents.
31+
if column := field.column:
32+
self.connection.database[model._meta.db_table].update_many({}, {"$unset": {column: ""}})
1933

2034
def alter_index_together(self, model, old_index_together, new_index_together):
2135
pass

0 commit comments

Comments
 (0)