Skip to content

Commit 9de1b6f

Browse files
committed
add helper for index creation
1 parent 2228431 commit 9de1b6f

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

django_mongodb/schema.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ def _create_model_indexes(self, model):
2222
# Field indexes
2323
for field in model._meta.local_fields:
2424
if self._field_should_be_indexed(model, field):
25-
index = Index(fields=[field.name])
26-
index.name = self._create_index_name(model._meta.db_table, [field.column])
27-
self.add_index(model, index)
25+
self._add_index_for_field(model, field)
2826
# Meta.index_together (RemovedInDjango51Warning)
2927
for field_names in model._meta.index_together:
3028
index = Index(fields=field_names)
@@ -53,11 +51,15 @@ def add_field(self, model, field):
5351
)
5452
# Add an index, if required.
5553
if self._field_should_be_indexed(model, field):
56-
index = Index(fields=[field.name])
57-
index.name = self._create_index_name(model._meta.db_table, [field.column])
58-
self.add_index(model, index, field=field)
54+
self._add_index_for_field(model, field)
5955

60-
def _drop_index_for_field(self, collection, model, field):
56+
def _add_index_for_field(self, model, field):
57+
new_index = Index(fields=[field.name])
58+
new_index.name = self._create_index_name(model._meta.db_table, [field.column])
59+
self.add_index(model, new_index, field=field)
60+
61+
def _drop_index_for_field(self, model, field):
62+
collection = self.connection.database[model._meta.db_table]
6163
# Find the index for this field
6264
meta_index_names = {index.name for index in model._meta.indexes}
6365
# Retrieve only BTREE indexes since this is what's created with
@@ -104,18 +106,16 @@ def _alter_field(
104106
and not old_field.unique
105107
and (not new_field.db_index or new_field.unique)
106108
):
107-
self._drop_index_for_field(collection, model, old_field)
109+
self._drop_index_for_field(model, old_field)
108110
# Have they renamed the column?
109111
if old_field.column != new_field.column:
110112
collection.update_many({}, {"$rename": {old_field.column: new_field.column}})
111113
# Move index to the new field, if needed.
112-
if self._field_should_be_indexed(model, old_field) and self.__field_should_be_indexed(
114+
if self._field_should_be_indexed(model, old_field) and self._field_should_be_indexed(
113115
model, new_field
114116
):
115-
self._drop_index_for_field(collection, model, old_field)
116-
new_index = Index(fields=[new_field.name])
117-
new_index.name = self._create_index_name(model._meta.db_table, [new_field.column])
118-
self.add_index(model, new_index, field=new_field)
117+
self._drop_index_for_field(model, old_field)
118+
self._add_index_for_field(model, new_field)
119119
# Replace NULL with the field default if the field and was changed from
120120
# NULL to NOT NULL.
121121
if new_field.has_default() and old_field.null and not new_field.null:
@@ -136,9 +136,7 @@ def _alter_field(
136136
and new_field.db_index
137137
and not new_field.unique
138138
):
139-
index = Index(fields=[new_field.name])
140-
index.name = self._create_index_name(model._meta.db_table, [new_field.column])
141-
self.add_index(model, index)
139+
self._add_index_for_field(model, new_field)
142140

143141
def remove_field(self, model, field):
144142
# Remove implicit M2M tables.

0 commit comments

Comments
 (0)