Improve fieldsets

This commit is contained in:
Edgar P. Burkhart 2025-01-01 16:21:31 +01:00
parent eeb5f4f04f
commit c0aa8d17b6
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
4 changed files with 41 additions and 40 deletions

View file

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

View file

@ -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) {

View file

@ -6,10 +6,10 @@
{% for error in form.non_field_errors %}<li>{{ error }}</li>{% endfor %}
</ul>
{% endif %}
{% for group in fieldsets %}
<div class="column">
{% for fieldset in group %}
{% if fieldset|length > 1 %}
{% if form.fieldsets %}
{% for group in form.fieldsets %}
<div class="column">
{% for fieldset in group %}
<div class="fieldset">
{% for field in fieldset %}
{% if field.errors %}<p class="error">{{ field.errors }}</p>{% endif %}
@ -19,18 +19,20 @@
</p>
{% endfor %}
</div>
{% else %}
{% with fieldset.0 as field %}
{% if field.errors %}<p class="error">{{ field.errors }}</p>{% endif %}
<p class="field">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
</p>
{% endwith %}
{% endif %}
{% endfor %}
</div>
{% endfor %}
{% else %}
<div class="column">
{% for field in form %}
{% if field.errors %}<p class="error">{{ field.errors }}</p>{% endif %}
<p class="field">
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
{{ field }}
</p>
{% endfor %}
</div>
{% endfor %}
{% endif %}
<div class="buttons">
{% block buttons %}
{% if not form.instance|adding %}

View file

@ -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"