diff --git a/aleksis/core/util/forms.py b/aleksis/core/util/forms.py index 7a0442449412b59bbd22c897cd1f6a6a70d0227d..edacfa9ab255d1d1f8fca2f9640de00fd13ffcc6 100644 --- a/aleksis/core/util/forms.py +++ b/aleksis/core/util/forms.py @@ -3,30 +3,33 @@ from collections import OrderedDict from material import Layout, Row -def preference_layout_builder(form_base_class, section=None): +class PreferenceLayout(Layout): """ - Return a django-material Layout object for the given form_base_class. + Create a django-material Layout object for the given form_base_class. :param form_base_class: A Form class used as the base. Must have a ``registry` attribute :param section: A section where the layout builder will load preferences """ - registry = form_base_class.registry - if section: - # Try to use section param - preferences_obj = registry.preferences(section=section) - - else: - # display all preferences in the form - preferences_obj = registry.preferences() - - rows = OrderedDict() - - for preference in preferences_obj: - row_name = preference.get("row", preference.identifier()) - rows.setdefault(row_name, []) - rows[row_name].append(preference.identifier()) - - rows_material = [] - for fields in rows.values(): - rows_material.append(Row(*fields)) - return Layout(*rows_material) + + def __init__(self, form_base_class, section=None): + + registry = form_base_class.registry + if section: + # Try to use section param + preferences_obj = registry.preferences(section=section) + + else: + # display all preferences in the form + preferences_obj = registry.preferences() + + rows = OrderedDict() + + for preference in preferences_obj: + row_name = preference.get("row", preference.identifier()) + rows.setdefault(row_name, []) + rows[row_name].append(preference.identifier()) + + rows_material = [] + for fields in rows.values(): + rows_material.append(Row(*fields)) + super().__init__(*rows_material) diff --git a/aleksis/core/views.py b/aleksis/core/views.py index 93bc5e5de7f8c47a4add0de0fc1850a3e757fe59..fb7f4513edde500751dbe923bcecd4c0782d2956 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -75,7 +75,7 @@ from .tables import ( from .util import messages from .util.apps import AppConfig from .util.core_helpers import objectgetter_optional -from .util.forms import preference_layout_builder +from .util.forms import PreferenceLayout @permission_required("core.view_dashboard") @@ -547,8 +547,7 @@ def preferences( form_class = preference_form_builder(form_class, instance=instance, section=section) # Get layout - layout = preference_layout_builder(form_class, section=section) - form_class.layout = layout + form_class.layout = PreferenceLayout(form_class, section=section) if request.method == "POST": form = form_class(request.POST, request.FILES or None)