Pour un formulaire, j’aimerais programmer une conditionnalité d’une liste déroulante ‹ référence › dans un formulaire en fonction d’un champ ‹ référence › rempli précédemment par la personne qui répond au formulaire.
L’idée, c’est de demander un département, puis une commune en France, afin de cartographier plusieurs centaines de structures.
La liste déroulante d’un champ ‹ référence › dans un formulaire permet de proposer 1000 options maximum, or il y a plus de 1000 communes en France. Mais pour un département donné, il y a toujours moins de 1000 communes (~900 maximum). D’où l’idée de d’abord demander le département puis la commune.
Merci pour cette question. Dans les tables, il est possible de filtrer des choix d’une liste de référence en fonction d’une autre colonne de référence (ex : afficher les villes d’un département préalablement choisi au lieu de l’ensemble des villes) ; mais, malheureusement, pour l’instant, ce n’est pas possible dans les formulaires.
Bonjour,
Pas d’alternative de mon côté non plus. J’espère que les formulaires évolueront prochainement car les manques à ce niveau sont assez nombreux et gênants (champs conditionnels, valeurs par défaut, règles de validation…)
J’ai peut-être une vue assez simpliste de la chose mais selon moi tout ce que Grist permet de mettre en place au niveau d’une table pour améliorer/fiabiliser la saisie doit aussi être actif dans le cas d’une saisie via formulaire.
Je viens de lire l’issue sur les règles de validation et ça me semble bien compliqué comme discussion…
Je viens de buter sur ce problème, j’avais bien en tête qu’on ne peut pas conditionner les réponses à une question en fonction d’une autre question, mais je ne me souvenais que la conditionnalité d’une colonne n’était pas prise en compte par le widget Formulaire. C’est vraiment bête
@louisp au final tu as trouvé des solutions alternatives ?
on a un besoin très similaire
une collectivité doit donner le nom de sa collectivité mais on a plusieurs dizaines de milliers de lignes… donc impossible de leur demander de choisir (surtout avec une limite à 1000 dans un choix déroulant)
donc pour l’instant …voilà nos alternatives :
soit on demande à la collectivité de choisir son département (référence table département) - c’est déjà ça… puis c’est un champs libre pour la collectivité
soit on demande le numéro de SIRET (et on devinera le nom exact ensuite
Soit on passe par une démarche simplifiée et on le connecte à notre grist… mais c’est moins simple…
Bonjour, ce fil discute de deux problèmes différents :
cas où la réponse à une question conditionne les choix proposés à la question suivante
cas où on filtre les choix proposés.
Dans le second cas, voici un contournement possible : il faut passer par une nouvelle colonne qui va être calculée en fonction de la première, pour ne proposer que les options possibles.
Par exemple j’ai un catalogue de formations dans une table FORMATIONS avec une colonne $Intitule, une colonne $Date et une colonne booléenne $Dans_le_futur qui vaut = $Date and $Date > TODAY(). Dans mon formulaire d’inscription, je veux proposer uniquement les formations qui ont une date dans le futur.
Normalement, dans une vue Table de la table INSCRIPTIONS, j’utiliserais la condition de liste déroulante choice.Dans_le_futur sur la colonne $Formation de type référence vers FORMATIONS. Mais ça ne marche pas dans la vue Formulaire, il faut donc que je crée une nouvelle colonne $Intitule_catalogue dans la table FORMATIONS avec une formule qui est vide lorsque la formation est dans le passé, et vaut $Intitule lorsque la formation est dans le futur. Voici cette formule :
if $Dans_le_futur:
return f"{$Intitule}"
else:
return ""
Ensuite, dans la table INSCRIPTIONS, je reprends la colonne $Intitule_catalogue sous forme de référence vers la table FORMATIONS. C’est cette colonne qui va afficher les choix possibles pour s’inscrire, à savoir les formations organisée à une date future.
Attention :
comme la formule de la colonne $Intitule_catalogue se recalcule et se vide une fois la date de la formation passée, il convient de copier l’information dans une colonne de données qui prend comme formule d’initialisation = $Intitule_catalogue et qui est une référence vers la table FORMATIONS