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):  | 
