From 77521294e056dc58d018e1621ba8151f570a5e7d Mon Sep 17 00:00:00 2001 From: Dominik George <nik@naturalnet.de> Date: Fri, 20 Aug 2021 14:39:50 +0200 Subject: [PATCH] Fix unique constraint on LessonDocumentation (cherry picked from commit 95b4ee28ba1772b8057253dbc4f73f6a3b8496e0) --- CHANGELOG.rst | 1 + .../0014_fix_unique_lesson_documentation.py | 29 +++++++++++++++++++ aleksis/apps/alsijil/models.py | 12 ++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 aleksis/apps/alsijil/migrations/0014_fix_unique_lesson_documentation.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 87fcd470a..b28978116 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -27,6 +27,7 @@ Fixed * The _Delete personal note_ action didn't work due to wrong usage of ``bulk_update``. * Groups and persons were shown multiple times in some forms due to filtering by permissions. +* Unique constraint on lesson documentations did not work and caused racey duplicates. `2.0rc4`_ - 2021-08-01 ---------------------- diff --git a/aleksis/apps/alsijil/migrations/0014_fix_unique_lesson_documentation.py b/aleksis/apps/alsijil/migrations/0014_fix_unique_lesson_documentation.py new file mode 100644 index 000000000..6ed00ec72 --- /dev/null +++ b/aleksis/apps/alsijil/migrations/0014_fix_unique_lesson_documentation.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.3 on 2021-08-20 12:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('alsijil', '0013_fix_uniqueness_per_site'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='lessondocumentation', + name='unique_documentation_per_object', + ), + migrations.AddConstraint( + model_name='lessondocumentation', + constraint=models.UniqueConstraint(fields=('week', 'year', 'lesson_period'), name='unique_documentation_per_lp'), + ), + migrations.AddConstraint( + model_name='lessondocumentation', + constraint=models.UniqueConstraint(fields=('week', 'year', 'event'), name='unique_documentation_per_ev'), + ), + migrations.AddConstraint( + model_name='lessondocumentation', + constraint=models.UniqueConstraint(fields=('week', 'year', 'extra_lesson'), name='unique_documentation_per_el'), + ), + ] diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 51857750b..58292f435 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -373,8 +373,16 @@ class LessonDocumentation(RegisterObjectRelatedMixin, ExtensibleModel): check=lesson_related_constraint_q, name="one_relation_only_lesson_documentation", ), models.UniqueConstraint( - fields=("lesson_period", "week", "year", "event", "extra_lesson"), - name="unique_documentation_per_object", + fields=("week", "year", "lesson_period"), + name="unique_documentation_per_lp", + ), + models.UniqueConstraint( + fields=("week", "year", "event"), + name="unique_documentation_per_ev", + ), + models.UniqueConstraint( + fields=("week", "year", "extra_lesson"), + name="unique_documentation_per_el", ), ] -- GitLab