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 Wed 30 October 2019 15:15

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

QGIS v3: Formulaire relation N:M avec checkbox

Bonjour,

Je dois implémenter un formulaire de type N:M

Mon cas est le suivant. J'ai trois tables :
- rue
- règlement
- rue_reglement
où un règlement peut s'appliquer à plusieurs rues et une rue peut se voir attribuer plusieurs règlements, d'où table intermédiaire rue_reglement

J'aurais besoin, lorsque je suis dans le formulaire des règlements, de renseigner les rues qui y sont associées.

Pour cela, je trouvais la solution des checkboxes assez intéressante. Un exemple en python ui existe ici pour des analyses terrain de pesticides :
https://medspx.fr/blog/Qgis/better_qgis … art_three/

Je me demandais si les dernières versions de qgis permettaient de rendre aisément ce type de formulaire ?


geodata au cerema et petits billets en géomatique

Hors ligne

 

#2 Wed 30 October 2019 23:22

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 722

Re: QGIS v3: Formulaire relation N:M avec checkbox

Bonsoir Mathieu,

Je vais regarder mais à ma connaissance il n'y a toujours pas de prise en charge de formulaire n:m.

Après, tu peux faire un truc pour le simuler en particulier si tu es sur postgres.

Créer dans ta table règlement un champs array qui stockerait les rues. (C'est d'ailleurs ce que fait le cerema avec les tables des fichiers fonciers)
Dans le formulaire Qgis, tu définis ce champs en utilisant le widget valeur relationnelle pointant vers la couche rue et en autorisant la saisie multiple. Tu auras le rendu des boîtes à cocher.

Ensuite tu crées une vue sous postgres pour dumper la table règlement et simuler ta table reglement_rue que tu importes dans Qgis. Puis tu crées une relation dans Qgis entre la table rue et la table rue_reglement.

Ça doit pouvoir marcher. Peut-être pas forcément académique et pas forcément génial si tu as beaucoup de rues.

Je te tiens au courant.
Bon courage,

Hors ligne

 

#3 Thu 31 October 2019 12:07

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 722

Re: QGIS v3: Formulaire relation N:M avec checkbox

Salut Mathieu,

je viens de regarder en faisant des tests.

Qgis utilise les clés étrangères composites depuis la 3.10

Depuis la dernière version (3.10) on a la possibilité d'utiliser les clés étrangères composites d'après le changelog

Data Management
Feature: Composite Foreign Keys

In QGIS 3.10, we added the possibility to create layer relationships which utilise composite foreign keys. QGIS now fully supports editing parent and child features which are linked with more than one attribute.


Définition des tables dans postgres

Code:

CREATE TABLE essai.rue
(
    id integer NOT NULL DEFAULT nextval('essai.rue_id_seq'::regclass),
    nom character varying(100) COLLATE pg_catalog."default",
    CONSTRAINT rue_pk PRIMARY KEY (id)
);

CREATE TABLE essai.reglement
(
    id integer NOT NULL DEFAULT nextval('essai.reglement_id_seq'::regclass),
    nom character varying(100) COLLATE pg_catalog."default",
    CONSTRAINT reglement_pk PRIMARY KEY (id)
);

create table essai.rue_reglement (
    id_rue integer references essai.rue (id),
    id_reglement integer references essai.reglement(id),
    primary key (id_rue, id_reglement)
);

Après avoir importé les tables dans qgis, quand tu définis tes relations de manière automatique tout se fait correctement.

Formule de mise en forme
Tu peux personnaliser l'affichage des rues et du règlements avec ce genre de formule (sinon ca te renvoie l'id)
pour personnaliser l'affichage du sous-formulaire :


Code:

format('%1 - %2',
attribute(get_feature_by_id('rue',  "id_rue" ),'nom'),
attribute(get_feature_by_id('reglement',  "id_reglement" ),'nom')
)

Cela semble donc prometteur mais ici on utilise le widget relation.
Bonne journée,


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

Hors ligne

 

#4 Mon 04 November 2019 11:18

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

Re: QGIS v3: Formulaire relation N:M avec checkbox

wow merci beaucoup lejedi76 smile

Je testerai sous la 3.10

En attendant, ces petites explorations m'ont permis de comprendre les drill down forms. Il faut :
- créer un champ rues_json de type JSON (texte) en geopackage qui stockera les clés étrangères de la couche rues

On peut, accessoirement, rajouter un champ de saisie texte saisie_nom_rue et filtrer la liste rues_json
selon ce qu'on met dans ce champ de saisie à la façon d'une auto-complétion grâce à l'expression

Code:

name like '%'||current_value('saisie_nom_rue')||'%'

Et pour avoir un champ où l'on sépare les noms de rue voulus par une virgule :

Code:

regexp_match(name,array_to_string(string_to_array(current_value('saisie_nom_rue'), ','), '|')) > 0

Les détails sont en PJ


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

geodata au cerema et petits billets en géomatique

Hors ligne

 

Pied de page des forums

Powered by FluxBB