@@ -37,6 +37,9 @@ def _create_model_indexes(self, model):
37
37
index = Index (fields = field_names )
38
38
index .set_name_with_model (model )
39
39
self .add_index (model , index )
40
+ # Meta.unique_together
41
+ if model ._meta .unique_together :
42
+ self .alter_unique_together (model , [], model ._meta .unique_together )
40
43
# Meta.constraints
41
44
for constraint in model ._meta .constraints :
42
45
self .add_constraint (model , constraint )
@@ -161,7 +164,25 @@ def alter_index_together(self, model, old_index_together, new_index_together):
161
164
self .add_index (model , idx )
162
165
163
166
def alter_unique_together (self , model , old_unique_together , new_unique_together ):
164
- pass
167
+ def _get_name (field_names ):
168
+ return "{}_uniq{}" .format ("_" .join (field_names ), len (field_names ))
169
+
170
+ olds = {tuple (fields ) for fields in old_unique_together }
171
+ news = {tuple (fields ) for fields in new_unique_together }
172
+ # Deleted uniques
173
+ for field_names in olds .difference (news ):
174
+ constraint = UniqueConstraint (
175
+ fields = field_names ,
176
+ name = _get_name (field_names ),
177
+ )
178
+ self .remove_constraint (model , constraint )
179
+ # Created uniques
180
+ for field_names in news .difference (olds ):
181
+ constraint = UniqueConstraint (
182
+ fields = field_names ,
183
+ name = _get_name (field_names ),
184
+ )
185
+ self .add_constraint (model , constraint )
165
186
166
187
def add_index (self , model , index , field = None , unique = False ):
167
188
if index .contains_expressions :
0 commit comments