summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
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
commite63822dee11f519a73790eb51f7009f919adc8b7 (patch)
treeaa076019ee81b488a717059d55b9b061ecb13607 /ishtar_common
parentbbb932b52ec60e587b98761ade4d8237e2eebc6b (diff)
downloadIshtar-e63822dee11f519a73790eb51f7009f919adc8b7.tar.bz2
Ishtar-e63822dee11f519a73790eb51f7009f919adc8b7.zip
✨ biographical notes: add json field to sheet - manage custom fields
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms_common.py40
-rw-r--r--ishtar_common/templates/ishtar/sheet_biographicalnote.html1
-rw-r--r--ishtar_common/views.py5
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)