#1 Mon 28 October 2019 12:04
- Elminster
- Membre
- Date d'inscription: 9 Jun 2008
- Messages: 25
QGIS 3.X: contrainte champ 1 sur champ 2
Bonjour à tous,
j'ai une couche (Shape) avec 2 champs: Type et Ss_Type.
pour le champ 1 je mets en place une liste de type, pour le champ 2 j'aimerai que ma liste de Ss_Type sous contrainte par le résultat de ma liste de type.
Voici un petit exemple pour être plus clair:
Pour ma liste de type, je peux obtenir les valeurs: 1, 2, 3
Pour mes Ss_Type, je peux obtenir A, B, C, D, E. Mais j'ai la contrainte suivante, pour le Type 1, je ne peux avoir que les Ss_Type A et B, pour le Type 2, je ne peux avoir que les Ss_Type C et D et pour le Ss_Type 3 je ne peux avoir que E.
Est-il possible de mettre en place ce type de filtre de liste de valeur dans la version 3 de QGIS.
Merci d'avance à ceux qui prendront le temps de me répondre.
Cordialement, Elminster
Hors ligne
#2 Mon 28 October 2019 12:27
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Voir ceci : http://changelog.qgis.org/en/qgis/versi … ding-forms
ça s'appelle "drill-down cascading forms"
Geodata au Cerema et petits billets en géomatique
Hors ligne
#3 Mon 28 October 2019 14:01
- Elminster
- Membre
- Date d'inscription: 9 Jun 2008
- Messages: 25
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Merci, mais d'après ce que je comprends (désolé mais mon anglais n'est pas terrible et je me base quasi exclusivement sur le visuel pour comprendre ce qu'il se passe...), dans l'exemple donné, il passe par une autre couche de référence pour avoir ses listes déroulantes.
Dans mon cas, je n'ai pas de couche de référence. Donc même si sur le principe, l'exemple donné correspond à ce que je cherche : filtrer un champ 2 à partir des données renseignées dans un champ1, je ne vois pas comment mettre ça en place pour mon cas puisque je n'ai pas cette couche de référence.
Mais peut être que je comprends pas bien la démarche, donc si je pouvais avoir un peu plus de détail pour m'expliquer comment m'y prendre.
Merci
Hors ligne
#4 Wed 30 October 2019 12:11
- Elminster
- Membre
- Date d'inscription: 9 Jun 2008
- Messages: 25
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Je me permets d'alimenter mon propre sujet.
Visiblement je n'ai pas de réponse pour avoir un système de filtre sans passer par une autre table.
Par contre, pour contourner le problème, est-il possible de mettre en place une contrainte de validation sur le champ 2.
Si je reprends mon exemple ci-dessus, lorsque je saisis Type1, je ne peux valider mon Ss_Type que si les valeurs sont A ou B, le Type2 avec les Ss_Type C et D...
Donc je ne passe plus par un système de filtre, mais par un système de validité de la données.
Est-ce que c'est faisable et si oui, comment?
Hors ligne
#5 Wed 30 October 2019 14:07
- Ben22
- Membre
- Date d'inscription: 11 May 2016
- Messages: 45
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Bonjour,
Je pense que la solution de MathieuR est la plus pertinente. Certes, vous n'avez pas de table de listing, mais vous devrez de toute façon exposer les contraintes de saisie du type2 par rapport au type1 quelques part. Autant le faire dans un fichier CSV que vous importez dans votre projet QGIS et qui vous permettra de d'activer une saisie de type "Valeur relationnelle" sur le type 2. Voici un exemple de csv :
(Avec une liste type 1 A, B, C)
Code:
type1,type2 A,1 A,2 A,3 B,1 B,4 B,5 C,1 C,6 C,8 C,9
Ne vous reste plus qu'à paramétrer en filtre de la façon suivante en reprenant la solution de MathieuR :
Code:
"type1" = current_value( 'type1')
Le résultat semble correspondre à votre demande.
Hors ligne
#6 Thu 31 October 2019 08:46
- Elminster
- Membre
- Date d'inscription: 9 Jun 2008
- Messages: 25
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Bonjour,
Je ne doute pas de la pertinence de la réponse de MathieuR. Et effectivement elle me sera sans doute très utile.
Mais la couche que je souhaite créer, est un modèle de couche. Cette couche sera reprise par plusieurs utilisateurs pour différents projets. Donc si j'avais pu faire ça uniquement sur cette couche, ça aurait éviter que les utilisateurs aient trop de manipulation à faire: copier la couche initiale dans leur dossier et reprendre les propriétés de la couche.
Mais si ce n'est pas possible de faire comme je le souhaitais, la responsable du projet m'a dit de ne pas s'embêter et de lancer quand même la production de la couche même si on ne peut pas mettre de contrainte entre mon champ Type et Ss_Type.
Merci quand même à vous.
Hors ligne
#7 Mon 04 November 2019 12:09
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Bonjour,
Voici en PJ un exemple fonctionnel de formulaires en cascade
La méthode :
- créer une table type
- créer une table sous-type
- créer une table de saisie avec dedans champ type et fk de sous-type
Dans table de saisie :
- mettre en place valeur relationnelle de type vers couche type stockant le fid de type
- mettre en place valeur relationnelle de sous-type vers couche sous-type et expression
Code:
fk = current_value('type')
Ainsi, on récupèrera de la couche sous-type que les lignes pour lesquelles la clé étrangère de type est égale à la valeur fid du champ type
bref, tout est dans la PJ
Geodata au Cerema et petits billets en géomatique
Hors ligne
#8 Tue 05 November 2019 08:39
- Elminster
- Membre
- Date d'inscription: 9 Jun 2008
- Messages: 25
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Merci MathieuR, par contre il manque la couche "types"
Hors ligne
#10 Fri 08 November 2019 18:34
Re: QGIS 3.X: contrainte champ 1 sur champ 2
Voici un zip ok avec la table type
Geodata au Cerema et petits billets en géomatique
Hors ligne