summaryrefslogtreecommitdiff
path: root/ishtar_common/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r--ishtar_common/forms.py27
1 files changed, 19 insertions, 8 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 0f1263bef..c560dc5ec 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -681,7 +681,9 @@ class IshtarForm(forms.Form, BSForm):
# to manage translation
def __init__(self, *args, **kwargs):
- super(IshtarForm, self).__init__(*args, **kwargs)
+ self._headers = {} # used for dynamic headers
+ self._types = [] # used for dynamic types
+ super().__init__(*args, **kwargs)
profile = None
if self.PROFILE_FILTER or self.SITE_KEYS:
profile = models.get_current_profile()
@@ -694,8 +696,6 @@ class IshtarForm(forms.Form, BSForm):
self.fields.pop(field_key)
if getattr(self, "confirm", False):
return
- for field in self.TYPES:
- self._init_type(field)
if self.SITE_KEYS:
field_keys = list(self.fields.keys())
for site_key in list(self.SITE_KEYS.keys()):
@@ -722,8 +722,14 @@ class IshtarForm(forms.Form, BSForm):
continue
for option, value in options.items():
setattr(self.fields[field_name].widget, option, value)
+ self._init_types()
self._post_init()
+ def _init_types(self):
+ type_lst = self._types or self.TYPES
+ for field in type_lst:
+ self._init_type(field)
+
def _init_type(self, field):
if field.key not in self.fields:
return
@@ -731,6 +737,8 @@ class IshtarForm(forms.Form, BSForm):
self.fields[field.key].help_text = field.get_help()
def get_headers(self):
+ if self._headers:
+ return self._headers
return self.HEADERS
def headers(self, key):
@@ -775,10 +783,11 @@ class IshtarForm(forms.Form, BSForm):
conditional_fields = self.CONDITIONAL_FIELDS
if hasattr(self, "get_conditional_fields"):
conditional_fields = self.get_conditional_fields()
- if not conditional_fields or not self.TYPES:
+ type_lst = self._types or self.TYPES
+ if not conditional_fields or not type_lst:
return
- type_dict = dict([(typ.key, typ.model) for typ in self.TYPES])
+ type_dict = dict([(typ.key, typ.model) for typ in type_lst])
html = ""
for condition, target_names in conditional_fields:
condition_field, condition_attr, condition_val = condition
@@ -851,12 +860,13 @@ class IshtarForm(forms.Form, BSForm):
all_values,
) = self.get_conditional_filter_fields()
- types = [typ.key for typ in self.TYPES]
+ type_lst = self._types or self.TYPES
+ type_lst = [typ.key for typ in type_lst]
html = ""
outputs = set()
for input_key in conditional_fields:
- if input_key not in types:
+ if input_key not in type_lst:
continue
name = input_key
if self.prefix:
@@ -1159,7 +1169,8 @@ class ManageOldType(IshtarForm):
self.init_data[k].append(val)
self.init_data = MultiValueDict(self.init_data)
super(ManageOldType, self).__init__(*args, **kwargs)
- for field in self.TYPES:
+ type_lst = self._types or self.TYPES
+ for field in type_lst:
self._init_type(field)
def _init_type(self, field):