@@ -35,6 +35,9 @@ def _create_model_indexes(self, model):
35
35
index = Index (fields = field_names )
36
36
index .set_name_with_model (model )
37
37
self .add_index (model , index )
38
+ # Meta.unique_together
39
+ if model ._meta .unique_together :
40
+ self .alter_unique_together (model , [], model ._meta .unique_together )
38
41
# Meta.constraints
39
42
for constraint in model ._meta .constraints :
40
43
self .add_constraint (model , constraint )
@@ -177,7 +180,25 @@ def alter_index_together(self, model, old_index_together, new_index_together):
177
180
self .add_index (model , idx )
178
181
179
182
def alter_unique_together (self , model , old_unique_together , new_unique_together ):
180
- pass
183
+ def _get_name (field_names ):
184
+ return "{}_uniq{}" .format ("_" .join (field_names ), len (field_names ))
185
+
186
+ olds = {tuple (fields ) for fields in old_unique_together }
187
+ news = {tuple (fields ) for fields in new_unique_together }
188
+ # Deleted uniques
189
+ for field_names in olds .difference (news ):
190
+ constraint = UniqueConstraint (
191
+ fields = field_names ,
192
+ name = _get_name (field_names ),
193
+ )
194
+ self .remove_constraint (model , constraint )
195
+ # Created uniques
196
+ for field_names in news .difference (olds ):
197
+ constraint = UniqueConstraint (
198
+ fields = field_names ,
199
+ name = _get_name (field_names ),
200
+ )
201
+ self .add_constraint (model , constraint )
181
202
182
203
def add_index (self , model , index , field = None , unique = False ):
183
204
if index .contains_expressions :
0 commit comments