@@ -73,15 +73,27 @@ def _alter_field(
7373 strict = False ,
7474 ):
7575 collection = self .get_collection (model ._meta .db_table )
76+ # Removed an index?
77+ old_field_indexed = self ._field_should_be_indexed (model , old_field )
78+ new_field_indexed = self ._field_should_be_indexed (model , new_field )
79+ if old_field_indexed and not new_field_indexed :
80+ self ._remove_field_index (model , old_field )
7681 # Have they renamed the column?
7782 if old_field .column != new_field .column :
7883 collection .update_many ({}, {"$rename" : {old_field .column : new_field .column }})
84+ # Move index to the new field, if needed.
85+ if old_field_indexed and new_field_indexed :
86+ self ._remove_field_index (model , old_field )
87+ self ._add_field_index (model , new_field )
7988 # Replace NULL with the field default if the field and was changed from
8089 # NULL to NOT NULL.
8190 if new_field .has_default () and old_field .null and not new_field .null :
8291 column = new_field .column
8392 default = self .effective_default (new_field )
8493 collection .update_many ({column : {"$eq" : None }}, [{"$set" : {column : default }}])
94+ # Added an index?
95+ if not old_field_indexed and new_field_indexed :
96+ self ._add_field_index (model , new_field )
8597
8698 def remove_field (self , model , field ):
8799 # Remove implicit M2M tables.
0 commit comments