@@ -35,6 +35,9 @@ def _create_model_indexes(self, model):
3535 index = Index (fields = field_names )
3636 index .set_name_with_model (model )
3737 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 )
3841 # Meta.constraints
3942 for constraint in model ._meta .constraints :
4043 self .add_constraint (model , constraint )
@@ -101,7 +104,25 @@ def alter_index_together(self, model, old_index_together, new_index_together):
101104 self .add_index (model , idx )
102105
103106 def alter_unique_together (self , model , old_unique_together , new_unique_together ):
104- pass
107+ def _get_name (field_names ):
108+ return "{}_uniq{}" .format ("_" .join (field_names ), len (field_names ))
109+
110+ olds = {tuple (fields ) for fields in old_unique_together }
111+ news = {tuple (fields ) for fields in new_unique_together }
112+ # Deleted uniques
113+ for field_names in olds .difference (news ):
114+ constraint = UniqueConstraint (
115+ fields = field_names ,
116+ name = _get_name (field_names ),
117+ )
118+ self .remove_constraint (model , constraint )
119+ # Created uniques
120+ for field_names in news .difference (olds ):
121+ constraint = UniqueConstraint (
122+ fields = field_names ,
123+ name = _get_name (field_names ),
124+ )
125+ self .add_constraint (model , constraint )
105126
106127 def add_index (self , model , index , unique = False ):
107128 if index .contains_expressions :
0 commit comments