diff --git a/nummi/main/forms.py b/nummi/main/forms.py index 39beb96..f6e3b83 100644 --- a/nummi/main/forms.py +++ b/nummi/main/forms.py @@ -7,12 +7,14 @@ class NummiFileInput(forms.ClearableFileInput): class NummiForm(forms.ModelForm): template_name = "main/form/form_base.html" + meta_fieldsets = [] def __init__(self, *args, user, **kwargs): super().__init__(*args, **kwargs) - def get_context(self): - context = super().get_context() - context["fieldsets"] = [[[field] for field in self]] - - return context + @property + def fieldsets(self): + for group in self.meta_fieldsets: + yield ((self[f] for f in fieldset) for fieldset in group) + else: + yield ([f] for f in self) diff --git a/nummi/main/static/main/css/form.css b/nummi/main/static/main/css/form.css index 996b35c..267a6f5 100644 --- a/nummi/main/static/main/css/form.css +++ b/nummi/main/static/main/css/form.css @@ -16,12 +16,14 @@ form { .column { display: grid; grid-gap: var(--gap); + border: 1px solid var(--gray); + padding: var(--gap); .fieldset { display: grid; grid-auto-columns: 1fr; grid-auto-flow: column; - grid-gap: var(--gap); + grid-gap: inherit; padding: 0; margin: 0; border: none; @@ -30,8 +32,6 @@ form { p.field { display: grid; grid-auto-rows: min-content; - border: 1px solid var(--gray); - padding: 0.5rem; margin: 0; &:has(> textarea) { diff --git a/nummi/main/templates/main/form/form_base.html b/nummi/main/templates/main/form/form_base.html index d92ca47..3f924c2 100644 --- a/nummi/main/templates/main/form/form_base.html +++ b/nummi/main/templates/main/form/form_base.html @@ -6,10 +6,10 @@ {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %} {% endif %} - {% for group in fieldsets %} -
    - {% for fieldset in group %} - {% if fieldset|length > 1 %} + {% if form.fieldsets %} + {% for group in form.fieldsets %} +
    + {% for fieldset in group %}
    {% for field in fieldset %} {% if field.errors %}

    {{ field.errors }}

    {% endif %} @@ -19,18 +19,20 @@

    {% endfor %}
    - {% else %} - {% with fieldset.0 as field %} - {% if field.errors %}

    {{ field.errors }}

    {% endif %} -

    - - {{ field }} -

    - {% endwith %} - {% endif %} + {% endfor %} +
    + {% endfor %} + {% else %} +
    + {% for field in form %} + {% if field.errors %}

    {{ field.errors }}

    {% endif %} +

    + + {{ field }} +

    {% endfor %}
    - {% endfor %} + {% endif %}
    {% block buttons %} {% if not form.instance|adding %} diff --git a/nummi/transaction/forms.py b/nummi/transaction/forms.py index e81ff22..9255ab7 100644 --- a/nummi/transaction/forms.py +++ b/nummi/transaction/forms.py @@ -20,6 +20,21 @@ class TransactionForm(NummiForm): "description", ] + meta_fieldsets = [ + [ + ["statement"], + ["name"], + ["value"], + [ + "date", + "real_date", + ], + ["category"], + ["trader", "payment"], + ], + [["description"]], + ] + def __init__(self, *args, **kwargs): _user = kwargs.get("user") _disable_statement = kwargs.pop("disable_statement", False) @@ -39,24 +54,6 @@ class TransactionForm(NummiForm): if _disable_statement: self.fields["statement"].disabled = True - def get_context(self): - context = super().get_context() - context["fieldsets"] = [ - [ - [self["statement"]], - [self["name"]], - [self["value"]], - [self["date"], self["real_date"]], - [self["category"]], - [self["trader"], self["payment"]], - ], - [ - [self["description"]], - ], - ] - - return context - class InvoiceForm(NummiForm): prefix = "invoice"