Skip to content

Commit a382dc5

Browse files
committed
AddField support
1 parent 1a9f5c5 commit a382dc5

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

django_mongodb/schema.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,12 @@ def add_field(self, model, field):
9292
self.get_collection(model._meta.db_table).update_many(
9393
{}, [{"$set": {column: self.effective_default(field)}}]
9494
)
95+
if isinstance(field, EmbeddedModelField):
96+
new_path = f"{field.column}."
97+
self._create_model_indexes(
98+
field.embedded_model, parent_model=model, column_prefix=new_path
99+
)
100+
95101
# Add an index or unique, if required.
96102
if self._field_should_be_indexed(model, field):
97103
self._add_field_index(model, field)

tests/schema_/test_embedded_model.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def assertTableExists(self, model):
163163
def assertTableNotExists(self, model):
164164
self.assertNotIn(model._meta.db_table, connection.introspection.table_names())
165165

166-
# Tests
166+
# SchemaEditor.create_model() tests
167167
def test_db_index(self):
168168
"""Field(db_index=True) on an embedded model."""
169169
with connection.schema_editor() as editor:
@@ -391,3 +391,33 @@ class Meta:
391391
)
392392
editor.delete_model(Author)
393393
self.assertTableNotExists(Author)
394+
395+
# SchemaEditor.add_field() tests
396+
@isolate_apps("schema_")
397+
def test_add_field_db_index(self):
398+
"""AddField + EmbeddedModelField"""
399+
400+
class Book(models.Model):
401+
name = models.CharField(max_length=100)
402+
403+
class Meta:
404+
app_label = "schema_"
405+
406+
new_field = EmbeddedModelField(Author)
407+
new_field.set_attributes_from_name("author")
408+
409+
with connection.schema_editor() as editor:
410+
# Create the table amd add the field.
411+
editor.create_model(Book)
412+
editor.add_field(Book, new_field)
413+
# Embedded indexes are created.
414+
self.assertEqual(
415+
self.get_constraints_for_columns(Book, ["author.age"]),
416+
["schema__book_author.age_dc08100b"],
417+
)
418+
self.assertEqual(
419+
self.get_constraints_for_columns(Book, ["author.address.zip_code"]),
420+
["schema__book_author.address.zip_code_7b9a9307"],
421+
)
422+
editor.delete_model(Book)
423+
self.assertTableNotExists(Author)

0 commit comments

Comments
 (0)