summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py40
1 files changed, 39 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):