From bfcabbfa35fba06ab44f80d25df19b67c2f6c359 Mon Sep 17 00:00:00 2001 From: Valentin Rigal <rigal@teklia.com> Date: Wed, 3 Apr 2024 12:22:57 +0200 Subject: [PATCH] Update CreateDatasetElementsSelection endpoint --- arkindex/training/serializers.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/arkindex/training/serializers.py b/arkindex/training/serializers.py index 33365ecfd8..9686bbb124 100644 --- a/arkindex/training/serializers.py +++ b/arkindex/training/serializers.py @@ -791,6 +791,20 @@ class SelectionDatasetElementSerializer(serializers.Serializer): raise ValidationError(f"Dataset {set.dataset.id} is not part of corpus {corpus.name}.") if set.dataset.state == DatasetState.Complete: raise ValidationError(f"Dataset {set.dataset.id} is marked as completed.") + # Ensure adding elements to the dataset does not break uniqueness constraint + selection = self.context["request"].user.selected_elements.filter(corpus=corpus) + if set.dataset.unique_elements and ( + existing_set := ( + set.dataset.sets + .exclude(id=set.id) + .filter(set_elements__element_id__in=selection.values_list("id", flat=True)) + .values_list("name", flat=True) + .first() + ) + ): + raise ValidationError([ + f"The dataset prevent duplication and this element is already present in set {existing_set}." + ]) return set def create(self, validated_data): -- GitLab