Skip to content

Commit 88a8960

Browse files
committed
implement SchemaEditor.alter_unique_together()
1 parent d906616 commit 88a8960

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

django_mongodb/schema.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)