@@ -22,9 +22,7 @@ def _create_model_indexes(self, model):
22
22
# Field indexes
23
23
for field in model ._meta .local_fields :
24
24
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 )
28
26
# Meta.index_together (RemovedInDjango51Warning)
29
27
for field_names in model ._meta .index_together :
30
28
index = Index (fields = field_names )
@@ -53,11 +51,15 @@ def add_field(self, model, field):
53
51
)
54
52
# Add an index, if required.
55
53
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 )
59
55
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 ]
61
63
# Find the index for this field
62
64
meta_index_names = {index .name for index in model ._meta .indexes }
63
65
# Retrieve only BTREE indexes since this is what's created with
@@ -104,18 +106,16 @@ def _alter_field(
104
106
and not old_field .unique
105
107
and (not new_field .db_index or new_field .unique )
106
108
):
107
- self ._drop_index_for_field (collection , model , old_field )
109
+ self ._drop_index_for_field (model , old_field )
108
110
# Have they renamed the column?
109
111
if old_field .column != new_field .column :
110
112
collection .update_many ({}, {"$rename" : {old_field .column : new_field .column }})
111
113
# 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 (
113
115
model , new_field
114
116
):
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 )
119
119
# Replace NULL with the field default if the field and was changed from
120
120
# NULL to NOT NULL.
121
121
if new_field .has_default () and old_field .null and not new_field .null :
@@ -136,9 +136,7 @@ def _alter_field(
136
136
and new_field .db_index
137
137
and not new_field .unique
138
138
):
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 )
142
140
143
141
def remove_field (self , model , field ):
144
142
# Remove implicit M2M tables.
0 commit comments