summaryrefslogtreecommitdiff
path: root/archaeological_context_records/forms.py
diff options
context:
space:
mode:
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
commit89e94b9e2e18ce0f4a9572258b85e401463eb0ea (patch)
treebf7480e89c9d0dea0932faf346762e3db7e5b7f9 /archaeological_context_records/forms.py
parent8627e7dc6cdd0ca96c42fb88c593e75302188fc4 (diff)
downloadIshtar-89e94b9e2e18ce0f4a9572258b85e401463eb0ea.tar.bz2
Ishtar-89e94b9e2e18ce0f4a9572258b85e401463eb0ea.zip
Context records: multiple deletion - redirections after wizard changes
Diffstat (limited to 'archaeological_context_records/forms.py')
-rw-r--r--archaeological_context_records/forms.py63
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):