Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
python:flask:flask_wtf [2022/12/23 10:20] marclebrun [Boutons Valider et Annuler] |
python:flask:flask_wtf [2023/01/08 08:13] (Version actuelle) marclebrun [Validation] |
||
---|---|---|---|
Ligne 92: | Ligne 92: | ||
</code> | </code> | ||
- | ===== Ajout de contraintes de validation ===== | + | ===== Ajout d'ID aux champs ===== |
+ | |||
+ | Par défaut c'est le nom du champ, mais si on désire imposer un **id** | ||
+ | on peut le passer au constructeur des champs : | ||
+ | |||
+ | <code python forms.py> | ||
+ | class MyForm(FlaskForm): | ||
+ | nom = StringField("Nom", id="edtNom") | ||
+ | sexe = SelectField("Sexe", id="cmbSexe") | ||
+ | </code> | ||
+ | |||
+ | ===== Validation ===== | ||
+ | |||
+ | Ajout de contraintes de validation aux champs : | ||
<code python forms.py> | <code python forms.py> | ||
Ligne 111: | Ligne 124: | ||
</code> | </code> | ||
- | Intégrer les messages de chaque champ dans le template : | + | Désactiver la validation par défaut du navigateur (ajouter **novalidate**) : |
+ | |||
+ | <code html> | ||
+ | <form action="" method="post" novalidate> | ||
+ | |||
+ | ... | ||
+ | |||
+ | </form> | ||
+ | </code> | ||
+ | |||
+ | Afficher les messages d'erreur de chaque champ : | ||
<code html register.html> | <code html register.html> | ||
Ligne 183: | Ligne 206: | ||
Source: [[https://stackoverflow.com/questions/63209897/flask-wtforms-building-a-selectfield-from-a-table]] | Source: [[https://stackoverflow.com/questions/63209897/flask-wtforms-building-a-selectfield-from-a-table]] | ||
+ | |||
+ | **EXEMPLE À TESTER :** | ||
+ | |||
+ | <code python> | ||
+ | from flask_wtf import FlaskForm | ||
+ | from wtforms import SelectField | ||
+ | from app.models import Categories | ||
+ | |||
+ | class MyForm(FlaskForm): | ||
+ | # ... | ||
+ | category = SelectField("Catégorie") | ||
+ | | ||
+ | def __init__(self, **kwargs): | ||
+ | super().__init__(**kwargs) | ||
+ | self.category.choices = Categories.query.all() | ||
+ | </code> | ||
+ | |||
+ | **Remplissage via Javascript => désactiver la validation** | ||
+ | |||
+ | Si la liste de choix est remplie via Javascript une fois le formulaire déjà créé, | ||
+ | la validation échouera car la valeur sélectionnée ne fera jamais partie des choix | ||
+ | possibles. Pour résoudre ce problème, il faut désactiver la validation pour ce | ||
+ | champ : | ||
+ | |||
+ | <code python> | ||
+ | class MyForm(FlaskForm): | ||
+ | # ... | ||
+ | category = SelectField("Catégorie", validate_choice=False) | ||
+ | </code> | ||