Manuel · 3

Enregistrements enfants

Affiche toutes les lignes d’une autre table qui référencent cette ligne via une clé étrangère – sous forme de liste, pas de valeur unique. L’inverse d’un champ de clé étrangère : là, la ligne « enfant » pointe vers son unique ligne « parente », ici la ligne « parente » affiche toutes ses lignes enfants à la fois.

Exemple pratique : une facture doit afficher ses lignes de facture sous forme de liste – une colonne « Lignes » sur la table factures, qui liste toutes les lignes correspondantes de lignes_facture.

Si seule une valeur agrégée sur les lignes enfants est nécessaire (par exemple « nombre de lignes » ou « somme de tous les prix de ligne »), un champ rollup plus simple suffit souvent. Un champ enregistrements enfants est utile lorsque les lignes individuelles elles-mêmes doivent être visibles – dans la vue tableau, sous forme de liste dans le formulaire, ou dans un modèle de document.

Création

Lors de l’ajout d’une nouvelle colonne dans l’onglet « Enregistrements enfants », vous choisissez :

  1. la table enfant (n’importe quelle autre table de la même source de données),
  2. son champ de clé étrangère qui référence cette table,
  3. les colonnes à afficher de la table enfant (sélection multiple – si elle reste vide, toutes les colonnes réelles de la table enfant sont affichées).

Un champ enregistrements enfants est en lecture seule : les lignes ne peuvent pas être ajoutées ou retirées directement depuis la ligne parente – cela reviendrait à modifier le champ de clé étrangère de la ligne enfant. Pour ajouter, retirer une ligne enfant ou modifier ses valeurs, ouvrez-la via sa propre table ou par un clic (voir ci-dessous).

Affichage dans la vue tableau

Une cellule affiche toujours un badge avec le nombre de lignes enfants trouvées, par exemple « 3 enregistrements » – quel que soit le nombre de colonnes sélectionnées, il n’y a (contrairement aux champs de liens) pas d’affichage en ligne sous forme de badges individuels, car des lignes enfants à plusieurs colonnes s’y prêtent mal.

Un clic sur le badge ouvre une fenêtre modale avec un tableau simple : une colonne par colonne enfant sélectionnée, une ligne par enregistrement enfant. Un clic sur une ligne ouvre l’enregistrement complet de la table enfant pour modification.

Agrégation dans le résumé

Dans la ligne de pied de page « résumé » de la vue tableau, seul COUNT est disponible pour une colonne d’enregistrements enfants – il compte le nombre total de toutes les lignes enfants sur l’ensemble des lignes parentes actuellement affichées (pas seulement le nombre indiqué dans le badge d’une seule ligne). SUM, AVG, MIN et MAX n’existent pas pour ce type de champ – pour un nombre agrégé unique sur les lignes enfants (par exemple une somme), un champ rollup est le bon choix.

Dans les modèles de document

Un champ enregistrements enfants peut être utilisé dans un modèle de document comme liste itérable, exactement comme dans l’exemple ci-dessus :

{% for item in lignes %}
  {{ item.designation }} -- {{ item.quantite }} x {{ item.prix_unitaire }}
{% endfor %}

Chaque entrée (item) porte exactement les colonnes sélectionnées lors de la création de la colonne.

Modifier la connexion a posteriori

Via le menu contextuel de colonne → « Modifier le champ », la connexion d’un champ enregistrements enfants existant peut être ajustée à tout moment, sans avoir à supprimer puis recréer la colonne. Dans la fenêtre modale d’édition, en plus du nom de champ et du format d’affichage, des menus déroulants préremplis ou une sélection multiple apparaissent pour :

  1. la colonne FK enfant (table enfant avec le champ de clé étrangère qui référence cette table),
  2. les colonnes à afficher de la table enfant (sélection multiple).

Les deux peuvent être modifiés indépendamment l’un de l’autre ; un clic sur « Enregistrer » applique immédiatement la nouvelle connexion.

Limitations connues

  • Non filtrable (comme rollup – lookup et liens le sont).
  • Aucune limite par ligne parente : toutes les lignes enfants correspondantes sont chargées, même très nombreuses.

Si seule une valeur de la ligne cible est nécessaire dans l’autre sens (la ligne enfant regarde vers sa ligne parente), voir Lookup.