diff options
Diffstat (limited to 'ishtar_common/forms.py')
-rw-r--r-- | ishtar_common/forms.py | 27 |
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): |