Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Mon 28 October 2019 12:04

Elminster
Participant occasionnel
Date d'inscription: 9 Jun 2008
Messages: 47

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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
Participant occasionnel
Date d'inscription: 9 Jun 2008
Messages: 47

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
Participant occasionnel
Date d'inscription: 9 Jun 2008
Messages: 47

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
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 95

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
Participant occasionnel
Date d'inscription: 9 Jun 2008
Messages: 47

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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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 wink


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

geodata au cerema et petits billets en géomatique

Hors ligne

 

#8 Tue 05 November 2019 08:39

Elminster
Participant occasionnel
Date d'inscription: 9 Jun 2008
Messages: 47

Re: QGIS 3.X: contrainte champ 1 sur champ 2

Merci MathieuR, par contre il manque la couche "types" wink

Hors ligne

 

#9 Thu 07 November 2019 15:42

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS 3.X: contrainte champ 1 sur champ 2

oups, j'envoie tout ça demain


geodata au cerema et petits billets en géomatique

Hors ligne

 

#10 Fri 08 November 2019 18:34

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

Re: QGIS 3.X: contrainte champ 1 sur champ 2

Voici un zip ok avec la table type


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

geodata au cerema et petits billets en géomatique

Hors ligne

 

#11 Wed 30 September 2020 12:21

Samuel Pereira Dias
Participant actif
Date d'inscription: 11 May 2015
Messages: 52

Re: QGIS 3.X: contrainte champ 1 sur champ 2

MathieuR a écrit:

Voici un zip ok avec la table type


Bonjour Mathieu,
Merci pour la pièce jointe et les explications. Cela fait des heures que j'essaie de créer mes cascades en m'aidant de tout ce que je vois sur les forums.
Et on remarque plein de façon différente d'arriver aux mêmes résultats... que je n'ai moi-même pas encore atteint..
Par exemple, certains exemple définissent le champs 1 en liste de valeur, et non pas directement en valeur relationnelle comme toi, ou encore le filtre d'expression vise parfois la table et non pas le champ comme toi...

Sur mon cas, j'ai reproduit exactement (ou du moins je le crois) la même chose que toi (pièce jointe. C'est à dire que pour être sûr, j'ai renommée mes tables et champs exactement comme toi.
Cela ne fonctionne pas... Dans mon Sous_type, j'ai tous les choix possible indépendamment de ce que j'ai défini dans type

Je travail sur le 3.10, cela peut-il avoir une incidence sur la reproductibilité de ton exemple?

Par curiosité, et même si je ne penses pas que cela ait une réelle influence que cherche à faire ton filtre dans le champs texte:
type like '%'||current_value('saisie_type')||'%'

Mon fid est en caractère(A,B,C,D), cela peut-il avoir une influence?

Merci d'avance pour ta réponse,

Ah, et puis dernière question.
Ma volonté finale est d'intégrer ce formulaire dans un projet qfield. Les cascades fonctionnent-elles sur Qfield?
...car sinon ça sert à rien que je m'embête...mais trop tard faut que j'aboutisse dans les tous les cas.

Merci!!!!

Hors ligne

 

Pied de page des forums

Powered by FluxBB