diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-14 09:03:56 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-14 09:03:56 +0200 |
commit | 73ba1638f580f6968126f4939a1f4495710915cb (patch) | |
tree | bf7480e89c9d0dea0932faf346762e3db7e5b7f9 /archaeological_context_records/forms.py | |
parent | 63ffae36db57b1f2a0df50e43c04a0676df79bc9 (diff) | |
download | Ishtar-73ba1638f580f6968126f4939a1f4495710915cb.tar.bz2 Ishtar-73ba1638f580f6968126f4939a1f4495710915cb.zip |
Context records: multiple deletion - redirections after wizard changes
Diffstat (limited to 'archaeological_context_records/forms.py')
-rw-r--r-- | archaeological_context_records/forms.py | 63 |
1 files changed, 45 insertions, 18 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 375943c9c..fef256b68 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -29,12 +29,13 @@ from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ from ishtar_common.models import valid_id, IshtarSiteProfile, Town, \ - SpatialReferenceSystem + SpatialReferenceSystem, valid_ids from archaeological_context_records import models from ishtar_common.forms import FinalForm, FormSet, \ - reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm, \ - FieldType, CustomFormSearch, IshtarForm, FormHeader, HistorySelect + reverse_lazy, get_form_selection, ManageOldType, CustomForm, \ + FieldType, CustomFormSearch, IshtarForm, FormHeader, HistorySelect, \ + MultiSearchForm from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import OperationSelect, ParcelField, \ RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase @@ -112,10 +113,35 @@ class RecordSelect(HistorySelect): ids.append('ope_relation_types_{}'.format(idx)) return ids +class BaseRecordFormSelection(object): + pk_key = None -class RecordFormSelection(CustomFormSearch): + def clean(self): + cleaned_data = self.cleaned_data + print(self.cleaned_data, self.pk_key) + if self.pk_key not in cleaned_data or not cleaned_data[self.pk_key]: + raise forms.ValidationError(_(u"You should at least select one " + u"context record.")) + pks = self.cleaned_data[self.pk_key] + if isinstance(pks, int): + pks = [pks] + else: + pks = pks.split(",") + for pk in pks: + try: + cr = models.ContextRecord.objects.get(pk=pk) + except models.ContextRecord.DoesNotExist: + raise forms.ValidationError(_("Invalid selection.")) + if cr.locked: + raise forms.ValidationError(_("This context record is locked " + "for edition.")) + return self.cleaned_data + + +class RecordFormSelection(BaseRecordFormSelection, CustomFormSearch): SEARCH_AND_SELECT = True form_label = _("Context record search") + pk_key = 'pk' associated_models = {'pk': models.ContextRecord} currents = {'pk': models.ContextRecord} @@ -128,20 +154,21 @@ class RecordFormSelection(CustomFormSearch): source_full=reverse_lazy('get-contextrecord-full')), validators=[valid_id(models.ContextRecord)]) - def clean(self): - cleaned_data = self.cleaned_data - if 'pk' not in cleaned_data or not cleaned_data['pk']: - raise forms.ValidationError(_(u"You should at least select one " - u"context record.")) - pk = self.cleaned_data["pk"] - try: - cr = models.ContextRecord.objects.get(pk=pk) - except models.ContextRecord.DoesNotExist: - raise forms.ValidationError(_("Invalid selection.")) - if cr.locked: - raise forms.ValidationError(_("This context record is locked for " - "edition.")) - return self.cleaned_data + +class RecordFormMultiSelection(BaseRecordFormSelection, MultiSearchForm): + form_label = _("Context record search") + associated_models = {'pks': models.ContextRecord} + pk_key = 'pks' + + pk = forms.CharField( + label="", required=False, + widget=widgets.DataTable( + reverse_lazy('get-contextrecord'), + RecordSelect, models.ContextRecord, + multiple_select=True, + gallery=True, map=True, + source_full=reverse_lazy('get-contextrecord-full')), + validators=[valid_ids(models.ContextRecord)]) class RecordFormGeneral(CustomForm, ManageOldType): |