diff --git a/dsfr/forms.py b/dsfr/forms.py index de14fc05d..6aeab64f0 100644 --- a/dsfr/forms.py +++ b/dsfr/forms.py @@ -1,6 +1,6 @@ from pathlib import Path -from django import forms +from django.forms import widgets, Form from django.forms.renderers import DjangoTemplates, get_default_renderer from django.utils.functional import cached_property @@ -21,16 +21,16 @@ def engine(self): ) -class DsfrBaseForm(forms.Form): +class DsfrBaseForm(Form): """ A base form that adds the necessary class on relevant fields """ # These input widgets don't need the fr-input class WIDGETS_NO_FR_INPUT = [ - forms.widgets.CheckboxInput, - forms.widgets.FileInput, - forms.widgets.ClearableFileInput, + widgets.CheckboxInput, + widgets.FileInput, + widgets.ClearableFileInput, ] @property @@ -55,15 +55,15 @@ def __init__(self, *args, **kwargs): """ if "class" not in visible.field.widget.attrs: if type(visible.field.widget) in [ - forms.widgets.Select, - forms.widgets.SelectMultiple, + widgets.Select, + widgets.SelectMultiple, ]: visible.field.widget.attrs["class"] = "fr-select" visible.field.widget.group_class = "fr-select-group" - elif type(visible.field.widget) == forms.widgets.RadioSelect: + elif type(visible.field.widget) == widgets.RadioSelect: visible.field.widget.attrs["dsfr"] = "dsfr" visible.field.widget.group_class = "fr-radio-group" - elif type(visible.field.widget) == forms.widgets.CheckboxSelectMultiple: + elif type(visible.field.widget) == widgets.CheckboxSelectMultiple: visible.field.widget.attrs["dsfr"] = "dsfr" elif type(visible.field.widget) not in self.WIDGETS_NO_FR_INPUT: visible.field.widget.attrs["class"] = "fr-input" diff --git a/dsfr/templates/dsfr/form_snippet.html b/dsfr/templates/dsfr/form_snippet.html index f6cfbda8f..45980b88a 100644 --- a/dsfr/templates/dsfr/form_snippet.html +++ b/dsfr/templates/dsfr/form_snippet.html @@ -3,6 +3,9 @@ {{ form.non_field_errors }} {% endif %} -{% for field in form %} +{% for hidden in form.hidden_fields %} + {{ hidden }} +{% endfor %} +{% for field in form.visible_fields %} {% include "dsfr/form_field_snippets/field_snippet.html" %} {% endfor %} diff --git a/example_app/forms.py b/example_app/forms.py index cc433dc0e..c421e4c51 100644 --- a/example_app/forms.py +++ b/example_app/forms.py @@ -99,9 +99,11 @@ class ExampleForm(DsfrBaseForm): sample_json = forms.JSONField(label="Fichier JSON", required=False) # files - sample_file = forms.FileField(label="Pièce jointe", required=False) + # hidden field + hidden_input = forms.CharField(widget=forms.HiddenInput(), initial="value") + def clean_sample_number(self): sample_number = self.cleaned_data["sample_number"]