From 7c8d6dbe1ddc7a162b492c72f6942e88bb2dc486 Mon Sep 17 00:00:00 2001 From: Jean-Pascal MILCENT Date: Tue, 13 Apr 2021 15:59:41 +0200 Subject: [PATCH] Fix t_roles: add option to select no organism Fix #130. --- app/t_roles/forms.py | 18 +++++++++++++++++- app/t_roles/route.py | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/t_roles/forms.py b/app/t_roles/forms.py index dec87f97..6aea5065 100644 --- a/app/t_roles/forms.py +++ b/app/t_roles/forms.py @@ -15,13 +15,29 @@ class MultiCheckboxField(SelectMultipleField): widget = widgets.ListWidget(prefix_label=False) option_widget = widgets.CheckboxInput() +def coerce_for_select(value): + """Permet à un champ de type SelectField contenant des id (=integer) + d'accepter une valeur vide permettant de définir le champ à NULL dans + la base de données. + Utiliser "coerce_for_select" à la place de la valeur "int" du + paramètre "coerce" d'un champ SelectField(). + Ajouter ensuite : + - une entrée au paramètre "choices" qui contiendra : + choices=[("", "-- Selectionnez une valeur...")] + - une entrée au paramètre "validators" : + validators=[validators.Optional()] + """ + if value == "": + return None + else: + return int(value) class Utilisateur(FlaskForm): active = BooleanField('Actif', default = True, false_values=(False, 'false')) nom_role = StringField('Nom', validators=[DataRequired(message="Le nom de l'utilisateur est obligatoire")]) prenom_role = StringField('Prenom') desc_role = TextAreaField('Description') - id_organisme = SelectField('Organisme', coerce=int, choices=[], default=-1) + id_organisme = SelectField('Organisme', choices=[], coerce=coerce_for_select, default="", validators=[validators.Optional()]) a_groupe = SelectMultipleField('', choices=[], coerce=int) identifiant = StringField('Identifiant') pass_plus = PasswordField('Mot de passe') diff --git a/app/t_roles/route.py b/app/t_roles/route.py index 8dc27dca..a3413588 100644 --- a/app/t_roles/route.py +++ b/app/t_roles/route.py @@ -12,7 +12,6 @@ from pypnusershub import routes as fnauth from pypnusershub.db.models import check_and_encrypt_password - from app.t_roles import forms as t_rolesforms from app.models import TRoles, Bib_Organismes, CorRoles from app.utils.utils_all import strigify_dict @@ -131,6 +130,7 @@ def addorupdate(id_role=None): form.id_organisme.choices = Bib_Organismes.choixSelect( "id_organisme", "nom_organisme", order_by="nom_organisme" ) + form.id_organisme.choices.insert(0, ("", "-- Selectionnez un organisme...")) form.a_groupe.choices = TRoles.choix_group("id_role", "nom_role", aucun=None) if id_role is not None: