@@ -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