summaryrefslogtreecommitdiff
path: root/ishtar_common/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r--ishtar_common/forms.py58
1 files changed, 50 insertions, 8 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 4db6a138b..87d498596 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -707,8 +707,8 @@ class FieldType:
self.empty_first = empty_first
self.help_text = help_text
- def get_choices(self, initial=None):
- args = {"empty_first": self.empty_first, "initial": initial}
+ def get_choices(self, initial=None, limit=None):
+ args = {"empty_first": self.empty_first, "initial": initial, "limit": limit}
if self.extra_args:
args.update(self.extra_args)
return self.model.get_types(**args)
@@ -848,10 +848,14 @@ class IshtarForm(BSForm, forms.Form):
for field in type_lst:
self._init_type(field)
- def _init_type(self, field):
+ def _init_type(self, field, extra=None):
if field.key not in self.fields:
return
- self.fields[field.key].choices = field.get_choices()
+ if not extra:
+ extra = {}
+ if hasattr(self, "limits") and field.key in self.limits:
+ extra["limit"] = self.limits[field.key]
+ self.fields[field.key].choices = field.get_choices(**extra)
if not getattr(field, "help_text", True):
return
self.fields[field.key].help_text = field.get_help()
@@ -1349,10 +1353,7 @@ class ManageOldType(IshtarForm):
if field.key not in self.fields:
return
initial = self.init_data.getlist(field.key)
- self.fields[field.key].choices = field.get_choices(
- initial=initial
- )
- self.fields[field.key].help_text = field.get_help()
+ super()._init_type(field, extra={"initial": initial})
class QAForm(CustomForm, ManageOldType):
@@ -1570,6 +1571,47 @@ class GeoItemSelect(DocumentItemSelect): # all geo item can have documents
] + DocumentItemSelect.TYPES
+class DatingSelect(forms.Form):
+ datings__period = forms.ChoiceField(label=_("Dating - period"), choices=[])
+ datings__precise_dating = forms.CharField(label=_("Dating - precise"))
+ datings__start_date = forms.IntegerField(label=_("Dating - start date"))
+ datings__end_date = forms.IntegerField(label=_("Dating - end date"))
+ datings__dating_type = forms.ChoiceField(
+ label=_("Dating - dating type"), choices=[]
+ )
+ datings__quality = forms.ChoiceField(label=_("Dating - dating quality"), choices=[])
+ TYPES = [
+ FieldType("datings__period", ("archaeological_operations", "Period")),
+ FieldType("datings__dating_type",
+ ("archaeological_context_records", "DatingType")),
+ FieldType("datings__quality",
+ ("archaeological_context_records", "DatingQuality")),
+ ]
+ PERIOD_FIELDS = [
+ "datings__period",
+ "datings__precise_dating",
+ "datings__start_date",
+ "datings__end_date",
+ "datings__dating_type",
+ "datings__quality",
+ ]
+
+ def _reorder_period_fields(self, insert_period_after):
+ fields = OrderedDict()
+ for key in self.fields:
+ if key in self.PERIOD_FIELDS:
+ continue
+ fields[key] = self.fields[key]
+ if key == insert_period_after:
+ for period_key in self.PERIOD_FIELDS:
+ if period_key not in self.fields:
+ continue
+ fields[period_key] = self.fields[period_key]
+ if period_key in self.fields:
+ fields[period_key] = self.fields[period_key]
+ self.fields = fields
+
+
class QADating(ManageOldType, forms.Form):
form_label = _("Dating")
associated_models = {