diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-10-10 13:42:18 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-10-14 16:48:37 +0200 |
commit | 435797a54e4d322a46711f303c2fc1fd5286330e (patch) | |
tree | 7c209135a17fe9b12fa2e2e844f345debed45d97 /archaeological_operations/forms.py | |
parent | 69df0a88eeaafeee81d76a3307e79fe5cad8ecf8 (diff) | |
download | Ishtar-435797a54e4d322a46711f303c2fc1fd5286330e.tar.bz2 Ishtar-435797a54e4d322a46711f303c2fc1fd5286330e.zip |
✨ site and operation relations forms refactoring
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r-- | archaeological_operations/forms.py | 70 |
1 files changed, 45 insertions, 25 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 433f3fd54..1a41503d4 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -425,30 +425,59 @@ class RecordRelationsForm(ManageOldType): class RecordRelationsFormSetBase(FormSet): delete_widget = forms.CheckboxInput - # passing left_record should be nicely done with form_kwargs with Django 1.9 - # with no need of all these complications - - def __init__(self, *args, **kwargs): - self.left_record = None - if 'left_record' in kwargs: - self.left_record = kwargs.pop('left_record') - super().__init__(*args, **kwargs) - - def _construct_forms(self): - # instantiate all the forms and put them in self.forms - self.forms = [] - for i in range(self.total_form_count()): - self.forms.append(self._construct_form( - i, left_record=self.left_record)) RecordRelationsFormSet = formset_factory( - RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase) + RecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase, + extra=3 +) RecordRelationsFormSet.form_label = _("Operations - Relations") RecordRelationsFormSet.form_admin_name = _("Operation - Relations") RecordRelationsFormSet.form_slug = "operation-relations" +class OpeSiteRelationsForm(ManageOldType): + associated_models = {'right_record': models.ArchaeologicalSite} + + right_record = forms.IntegerField( + label="Site", + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-archaeologicalsite'), + associated_model=models.ArchaeologicalSite), + validators=[valid_id(models.ArchaeologicalSite)], required=False) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["right_record"].label = get_current_profile().get_site_label() + +OpeSiteRelationsFormSet = formset_factory( + OpeSiteRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase, + extra=3 +) +OpeSiteRelationsFormSet.form_label = _("Operations - Sites relations") +OpeSiteRelationsFormSet.form_admin_name = _("Operation - Sites - relations") +OpeSiteRelationsFormSet.form_slug = "operation-site-relations" + + +class SiteOpeRelationsForm(ManageOldType): + associated_models = {'right_record': models.Operation} + + right_record = forms.IntegerField( + label=_("Operation"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-operation'), + associated_model=models.Operation), + validators=[valid_id(models.Operation)], required=False) + +SiteOpeRelationsFormSet = formset_factory( + SiteOpeRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase, + extra=3 +) +SiteOpeRelationsFormSet.form_label = _("Sites - Operations relations") +SiteOpeRelationsFormSet.form_admin_name = _("Sites - Operation relations") +SiteOpeRelationsFormSet.form_slug = "siteoperation-relations" + + class OperationSelect(GeoItemSelect): _model = models.Operation form_admin_name = _("Operation - 001 - Search") @@ -671,7 +700,6 @@ class OperationFormGeneral(CustomForm, ManageOldType): 'collaborator': Person, 'remain': models.RemainType, 'period': models.Period, - 'archaeological_site': models.ArchaeologicalSite, 'town': Town, } HEADERS['code_patriarche'] = FormHeader(_("General")) @@ -691,9 +719,6 @@ class OperationFormGeneral(CustomForm, ManageOldType): label=_("Towns"), model=Town, required=False, remote=True) - archaeological_site = widgets.Select2MultipleField( - model=models.ArchaeologicalSite, - required=False, remote=True) year = forms.IntegerField(label=_("Year"), initial=lambda: datetime.datetime.now().year, validators=[validators.MinValueValidator(1000), @@ -845,15 +870,10 @@ class OperationFormGeneral(CustomForm, ManageOldType): if not profile.underwater: self._remove_fields(("drassm_code",)) data = kwargs.get("data", {}) or kwargs.get("initial", {}) - has_site = any(1 for k, v in data.items() if v and k.split("-")[-1] == "archaeological_site") - if not has_site and not profile.archaeological_site: - self._remove_fields(("archaeological_site",)) if 'collaborator' in self.fields: self.fields['collaborator'].widget.attrs['full-width'] = True if towns and towns != -1: self.fields['town'].choices = [('', '--')] + towns - if 'archaeological_site' in self.fields: - self.fields['archaeological_site'].label = get_current_profile().get_site_label() def clean(self): cleaned_data = self.cleaned_data |