Skip to content

Commit 1b34744

Browse files
fix: hidden field are not correctly rendered with dsfr_form_field refacto
Commit 02e4b7 refactored forms to use Django's form rendering API instead of custom 'dsfr/form_field_snippets/field_snippet.html' template. 'dsfr_form_field' tag was preseved for compatibility but behavior on hidden fields was left out by mistake. This PR solves this
1 parent f3ad661 commit 1b34744

2 files changed

Lines changed: 15 additions & 2 deletions

File tree

dsfr/templatetags/dsfr_tags.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1667,7 +1667,7 @@ def dsfr_form_field(field: BoundField) -> str:
16671667
stacklevel=3,
16681668
)
16691669

1670-
return field.as_field_group()
1670+
return field.as_hidden() if field.is_hidden else field.as_field_group()
16711671

16721672

16731673
register.filter(name="dsfr_input_class_attr", filter_func=dsfr_input_class_attr)
@@ -1777,7 +1777,8 @@ def dsfr_form(context: Context):
17771777
def dsfr_mark_optionnal_fields(bf):
17781778
mark_optional_fields = getattr(settings, "DSFR_MARK_OPTIONAL_FIELDS", False)
17791779
if bf.field.required and not mark_optional_fields:
1780-
return mark_safe(
1780+
1781+
return mark_safe( # nosec B308
17811782
'<span class="fr-required-marker" aria-hidden="true"> *</span>'
17821783
)
17831784
elif not bf.field.required and mark_optional_fields:

dsfr/test/test_fields.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ class DummyForm(DsfrBaseForm):
1919
}
2020
),
2121
)
22+
user_name_hidden = forms.CharField(
23+
label="Nom d’utilisateur", max_length=100, widget=forms.HiddenInput
24+
)
2225

2326
def test_full_form_works(self):
2427
rendered = Template("{{form}}").render(
@@ -32,6 +35,15 @@ def test_correct_field_works(self):
3235
).render(Context({"form": FormFieldTestCase.DummyForm()}))
3336
self.assertIn("Nom d’utilisateur", rendered)
3437

38+
def test_correct_hidden_field_works(self):
39+
rendered = Template(
40+
"{% load dsfr_tags %}{% dsfr_form_field form.user_name_hidden %}"
41+
).render(Context({"form": FormFieldTestCase.DummyForm()}))
42+
self.assertHTMLEqual(
43+
'<input id="id_user_name_hidden" name="user_name_hidden" type="hidden">',
44+
rendered,
45+
)
46+
3547
def test_incorrect_field_raises_error(self):
3648
with self.assertRaises(AttributeError):
3749
_rendered = Template(

0 commit comments

Comments
 (0)