Skip to content
Snippets Groups Projects
Commit bab6a711 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '337-add-option-to-define-rows-for-preferences-forms' into 'master'

Resolve "Add option to define rows for preferences forms"

Closes #337

See merge request !422
parents c7621afe 8b8b6ec2
No related branches found
No related tags found
1 merge request!422Resolve "Add option to define rows for preferences forms"
Pipeline #5105 passed
from collections import OrderedDict
from material import Layout, Row
class PreferenceLayout(Layout):
"""django-material Layout object for managing preferences."""
def __init__(self, form_base_class, section=None):
"""
Create 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))
super().__init__(*rows_material)
......@@ -75,6 +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 PreferenceLayout
@permission_required("core.view_dashboard")
......@@ -545,6 +546,9 @@ def preferences(
# Build final form from dynamic-preferences
form_class = preference_form_builder(form_class, instance=instance, section=section)
# Get layout
form_class.layout = PreferenceLayout(form_class, section=section)
if request.method == "POST":
form = form_class(request.POST, request.FILES or None)
if form.is_valid():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment