summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/forms.py12
-rw-r--r--ishtar_common/utils.py14
2 files changed, 25 insertions, 1 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 086f85b90..07d1ac417 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -44,7 +44,7 @@ from django.utils.translation import ugettext_lazy as _
from bootstrap_datepicker.widgets import DatePicker, DATE_FORMAT
from ishtar_common import models
from ishtar_common import widgets
-from ishtar_common.utils import MultiValueDict
+from ishtar_common.utils import MultiValueDict, update_data, generate_dict_from_data_string
# from formwizard.forms import NamedUrlSessionFormWizard
@@ -219,6 +219,9 @@ class CustomForm(BSForm):
except AttributeError:
pass
super().__init__(*args, **kwargs)
+ self.current_user = self.current_user or getattr(self, "user", None)
+ if self.current_user and not hasattr(self.current_user, "current_profile"):
+ self.current_user = getattr(self.current_user, "ishtaruser", None)
if hasattr(self, "fields"):
self.base_field_keys = self.fields.keys()
else:
@@ -1363,6 +1366,13 @@ class QAForm(CustomForm, ManageOldType):
value = self.cleaned_data[base_key]
if not value:
return
+ if base_key.startswith("data__"):
+ # manage custom fields
+ item.data = update_data(
+ item.data,
+ generate_dict_from_data_string(base_key, value)
+ )
+ return
key = base_key[len(self.PREFIX):]
field = item._meta.get_field(key)
if getattr(field, "related_model", None):
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index cf58216a4..23495c2ec 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -799,6 +799,20 @@ def update_data(data, new_data, merge=False):
res[k] = new_data[k]
return res
+def generate_dict_from_data_string(key: str, value: str) -> dict:
+ """
+ "data__key1__key2", value -> {"key1": {"key2": value}}
+ """
+ full_dct = dct = {}
+
+ keys = key[len("data__"):].split("__")
+ for k in keys[:-1]: # do not get the last key
+ dct[k] = {}
+ dct = dct[k]
+ dct[keys[-1]] = value
+
+ return full_dct
+
def generate_dict_from_list(lst: list, value) -> dict:
"""