diff --git a/formbar/fields.py b/formbar/fields.py index 54490f3..05e2472 100644 --- a/formbar/fields.py +++ b/formbar/fields.py @@ -731,18 +731,30 @@ class SelectionField(CollectionField): def get_options(self): options = [] user_defined_options = self._config.options - if isinstance(user_defined_options, list) and \ - len(user_defined_options) > 0: - for option in self.filter_options(user_defined_options): - options.append((option[0], option[1], option[2])) - elif isinstance(user_defined_options, str): - for option in self._form.merged_data.get(user_defined_options): - options.append((option[0], option[1], True)) - elif self._form._item and hasattr(self._form._item, "get_options"): - for option in self._form._item.get_options(self.name): - options.append((option[0], option[1], True)) + is_option_list = isinstance(user_defined_options, list) and len(user_defined_options) + is_string_options = isinstance(user_defined_options, str) + is_provided_by_formdataprovider = self._form._item and hasattr(self._form._item, "get_options") + + if is_option_list: + self.add_options_from_list(options, user_defined_options) + elif is_string_options: + self.add_string_options(options, user_defined_options) + elif is_provided_by_formdataprovider: + self.add_formdata_options(options) return self.sort_options(options) + def add_formdata_options(self, options): + for option in self._form._item.get_options(self.name): + options.append((option[0], option[1], True)) + + def add_string_options(self, options, user_defined_options): + for option in self._form.merged_data.get(user_defined_options): + options.append((option[0], option[1], True)) + + def add_options_from_list(self, options, user_defined_options): + for option in self.filter_options(user_defined_options): + options.append((option[0], option[1], option[2])) + def _from_python(self, value): value = super(CollectionField, self)._from_python(value) # Special handling for multiple values (multiselect in diff --git a/formbar/form.py b/formbar/form.py index 0dbf6d6..070861d 100644 --- a/formbar/form.py +++ b/formbar/form.py @@ -75,12 +75,12 @@ class ValidationException(Exception): class FormDataprovider(object): - """Dummy class which can be used to provided dynamic data to the + """Dummy class which can be used to provide dynamic data to the form. It can be provided as item on the form init to provide dynamically loaded options and values. As said the dataprovider can be user to provide `options` and `values`. - Both are provided by defining propertys. + Both are provided by defining properties. 1. Value The function should simply return the pythonic value of the field: