From 34b80cd9b735aaae35859c972b75c3e9220cc8a4 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 14 Sep 2019 09:44:45 +0200 Subject: Archaeological files: multiple del - redir --- ishtar_common/forms.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'ishtar_common/forms.py') diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 5be5deafe..973a61228 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -384,6 +384,37 @@ class CustomFormSearch(forms.Form): self.fields['pk'].widget.user = user +class LockForm(object): + associated_models = {} + + def clean(self): + cleaned_data = self.cleaned_data + pk_key = None + if hasattr(self, "pk_key"): + pk_key = self.pk_key + elif len(self.associated_models.keys()) == 1: + pk_key = list(self.associated_models.keys())[0] + if not pk_key: + raise NotImplementedError("pk_key must be set") + if pk_key not in cleaned_data or not cleaned_data[pk_key]: + raise forms.ValidationError(_(u"You should select an item.")) + model = self.associated_models[pk_key] + pks = self.cleaned_data[pk_key] + if isinstance(pks, int): + pks = [pks] + else: + pks = pks.split(",") + for pk in pks: + try: + item = model.objects.get(pk=pk) + except model.DoesNotExist: + raise forms.ValidationError(_("Invalid selection.")) + if item.locked: + raise forms.ValidationError(_("This item is locked " + "for edition.")) + return self.cleaned_data + + class MultiSearchForm(CustomFormSearch): SEARCH_AND_SELECT = True pk_key = 'pks' -- cgit v1.2.3