Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduire un paramètre d'informations suppmémentaires dans le template des champs #153

Open
christophehenry opened this issue Jun 24, 2024 · 0 comments
Labels
enhancement New feature or request help wanted Extra attention is needed

Comments

@christophehenry
Copy link
Contributor

christophehenry commented Jun 24, 2024

Le design du DSFR permet d'introduire des informations supplémentaires sous un champs, comme pour le champ mot de passe sur ce formulaire. Malheureusement, Field ne fourni aucun paramètre qui permette d'avoir ces infos.

3 solutions possibles :

  1. documenter un champ Field.additionnal_field_infos à utiliser comme suit :
    class ExampleForm(DsfrBaseForm):
        field = TextInput()
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self["field"].additionnal_field_infos = mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
  2. utiliser form.field[""].widget.attr :
    class ExampleForm(DsfrBaseForm):
        field = TextInput(widget=Widget(attrs={
            "additionnal_field_infos": mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
        })) 
    
        def __init__(self, *args, **kwargs):
           # Ou alors
            self["field"].widget.attrs["additionnal_field_infos"] = mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
            super().__init__(*args, **kwargs)
  3. déclarer un membre additionnal_field_infos pour la classe DsfrBaseForm qui s'utiliserait comme suit :
      class ExampleForm(DsfrBaseForm):
        field = TextInput()
        additionnal_field_infos = {
            "field": mark_safe(
                '<p class="fr-message fr-message--info">12 caractères minimum</p>'
            )
        }

Aucune solution n'est vraiment satisfaisante.

  1. oblige à toujours écrire un __init__ et peut être incompréhensible si la personne écrit self["field"] (qui contient le Field) au lieu de self.fields["field"] (qui contient le BoundField correspondant).

  2. mélange des informations sur les attributs HTML avec des informations sur le widget, ce qui est contre-intuitif, oblige à surcharger le paramètre widget du Field ou écrire un __init__.

  3. a ma préférence, même si elle n'est pas très Djangonique. L'idéal serait un membre dans la classe Meta mais seule ModelForm a une classe Meta.

@Ash-Crow Ash-Crow added enhancement New feature or request help wanted Extra attention is needed labels Aug 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants