diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-25 22:36:20 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2025-02-25 22:36:20 +0100 |
commit | e63822dee11f519a73790eb51f7009f919adc8b7 (patch) | |
tree | aa076019ee81b488a717059d55b9b061ecb13607 | |
parent | bbb932b52ec60e587b98761ade4d8237e2eebc6b (diff) | |
download | Ishtar-e63822dee11f519a73790eb51f7009f919adc8b7.tar.bz2 Ishtar-e63822dee11f519a73790eb51f7009f919adc8b7.zip |
✨ biographical notes: add json field to sheet - manage custom fields
-rw-r--r-- | ishtar_common/forms_common.py | 40 | ||||
-rw-r--r-- | ishtar_common/templates/ishtar/sheet_biographicalnote.html | 1 | ||||
-rw-r--r-- | ishtar_common/views.py | 5 |
3 files changed, 45 insertions, 1 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 5b81eb005..8529e0c24 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -78,11 +78,13 @@ from .forms import ( from ishtar_common.data_importer import ImporterError from ishtar_common.utils import ( clean_session_cache, + generate_dict_from_list, get_file_from_link, is_downloadable, max_size_help, max_value_current_year, reverse_coordinates, + update_data, ) from archaeological_operations.models import Operation @@ -1419,7 +1421,10 @@ class PersonTypeForm(ManageOldType, forms.Form): self.fields["person_type"].help_text = models.PersonType.get_help() -class BiographicalNoteForm(ManageOldType, NewItemForm): +class BiographicalNoteForm(CustomForm, ManageOldType, NewItemForm): + form_label = _("Biographical note") + form_admin_name = _("Biographical note - 010 - General") + form_slug = "biographicalnote-general" extra_form_modals = ["organization", "person"] form_label = _("Identity") associated_models = { @@ -1474,12 +1479,27 @@ class BiographicalNoteForm(ManageOldType, NewItemForm): dct[key] = model.objects.get(pk=dct[key]) except model.DoesNotExist: dct.pop(key) + # get data + data = {} + for k in list(dct.keys()): + if k.startswith("data__"): + v = dct.pop(k) + keys = k.split("__")[1:] + dct = generate_dict_from_list(keys, v) + data = update_data(data, dct) + if not item: item = models.BiographicalNote.objects.create(**dct) else: for k in dct: setattr(item, k, dct[k]) item.save() + + # set data + if item.data or data: + data = update_data(item.data, data) + item.data = data + item.save() return item @@ -1487,12 +1507,30 @@ class BiographicalNoteEditForm(BiographicalNoteForm, IshtarForm): def __init__(self, *args, **kwargs): self.items = kwargs.pop("items") if "items" in kwargs else None initial = {} + self.item = None + # init base fields if self.items: self.item = self.items[0] for k in self.base_fields: initial[k] = getattr(self.item, k) kwargs["initial"] = initial super().__init__(*args, **kwargs) + # init data fields + if not self.item or not self.item.data: + return + for k in self.fields: + if not k.startswith("data__"): + continue + value = None + value = self.item.data + for key in k.split("__")[1:]: + if not isinstance(value, dict) or key not in value: + value = None + break + value = value[key] + if not value: + continue + self.fields[k].initial = value class AccountForm(IshtarForm): diff --git a/ishtar_common/templates/ishtar/sheet_biographicalnote.html b/ishtar_common/templates/ishtar/sheet_biographicalnote.html index 47104066b..c1bab74b3 100644 --- a/ishtar_common/templates/ishtar/sheet_biographicalnote.html +++ b/ishtar_common/templates/ishtar/sheet_biographicalnote.html @@ -19,5 +19,6 @@ {% field_flex_detail "Organization" item.organization %} {% field_flex_full "Biography" item.formatted_biography %} </div> +{% include "ishtar/blocks/sheet_json.html" %} {% endblock %} diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 32f23f91d..f686709a0 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -3340,6 +3340,11 @@ class QABiographicalNoteForm(QAItemForm): def get_quick_action(self): return self.model.QA_EDIT + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["user"] = self.request.user + return kwargs + def form_valid(self, form): return self.form_save(form) |