Documentation en ligne

Utiliser les filtres de requêtes

Les filtres de requêtes se distinguent des autres filtres par leur capacité à interroger et remonter des données comme on pourrait le faire avec un langage de base de donnée de type SQL.

Chercher dans les demandes ou les fiches

Ils permettent de faire des requêtes sur les demandes et les fiches, en utilisant respectivement :

  • forms|objects:"slug-du-formulaire" pour les demandes
  • cards|objects:"slug-du-modele-de-fiche" pour les fiches.
forms|objects:"slug-du-formulaire"|filter_by:"nom"|filter_value:"entrouvert"

permet de chercher, dans un formulaire dont le slug est « slug-du-formulaire », si la valeur « entrouvert » est déjà présente dans un champ dont l'identifiant est « nom ».

Ou, pour tester une valeur d'un champ :

forms|objects:"slug-du-formulaire"|filter_by:"nom"|filter_value:form_var_nom
forms|objects:"slug-du-formulaire"|filter_by:"nom"|filter_value:form_var_autre_chose

À noter : pour tester la valeur d'un champ liste, il faut passer la valeur et non le libellé, soit :

forms|objects:"slug-du-formulaire"|filter_by:"liste"|filter_value:form_var_liste_raw
forms|objects:"slug-du-formulaire"|filter_by:"liste"|filter_value:form_var_autre_liste_raw
forms|objects:"slug-du-formulaire"|filter_by:"liste"|filter_value:2

Pour désigner le formulaire en cours, on peut remplacer

forms|objects:"slug-du-formulaire" simplement par form_objects

Récupérer la valeur d'un champ

Appliqués à une fiche cette fois, ces filtres peuvent permettre de faire remonter la valeur d'un champ particulier pour une fiche donnée :

cards|objects:"slug-modele-fiche"|filter_by:"nom"|filter_value:"entrouvert"|first|get:"form_var_telephone"

permet de récupérer le contenu du champ dont l'identifiant est « telephone », dans un modèle de fiche dont le slug est « slug-modele-fiche », pour la première fiche contenant la valeur « entrouvert » dans le champ dont l'identifiant est « nom ».

Pour récupérer l'identifiant interne, on utilise "form_internal_id" :

cards|objects:"slug-modele-fiche"|filter_by:"nom"|filter_value:"entrouvert"|first|get:"form_internal_id"

Récupérer une liste

|getlist va permettre de récupérer un objet liste plutôt qu'une seule valeur. Pour un modèle fiche « enfant » on pourra récupérer la liste des noms en faisant :
cards|objects:"enfant"|getlist:"nom"
Il est possible d'afficher la liste des nom séparés par des virgules en faisant
cards|objects:"enfant"|getlist:"nom"|join:","

Filtres de comparaison

Les filtres vus jusque ici ne permettent que de vérifier la correspondance stricte à une valeur : « donne-moi toutes les fiches dans lesquelles le nom est "Dupont" ». Les filtres de comparaison permettent de demander des choses plus complexes comme : « donne moi toutes les fiches dont le prix est supérieur à 100 ». Ces filtres sont  :
  • |equal |filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé correspond à la valeur xxx
  • |not_equal|filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé est différent de la valeur xxx
  • |less_than|filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé est inférieur à la valeur xxx
  • |greater_than|filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé est supérieur à la valeur xxx
  • |less_than_or_equal|filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé est inférieur ou égal à la valeur xxx
  • |greater_than_or_equal|filter_value:"xxx" : renvoie les demandes pour lesquelles le champ testé est supérieur ou égal à la valeur xxx
  • |in|filter_value:"xxx|yyy" : renvoie les demandes pour lesquelles le champ testé correspond à la valeur xxx ou à la valeur yyy
  • |not_in|filter_value:"xxx|yyy" : renvoie les demandes pour lesquelles le champ testé ne correspond ni à la valeur xxx ni à la valeur yyy
  • |absent : renvoie les demandes pour lesquelles le champ testé n'est pas rempli
  • |existing : renvoie les demandes pour lesquelles le champ testé est rempli
  • |between|filter_value:"1|5" : renvoie les demandes pour lesquelles le champ testé est supérieur ou égal à 1 et inférieur à 5
Cette expression va renvoyer l'ensemble des demandes pour lesquelles le revenu est inférieur à 2000 :
{{forms|objects:"test"|filter_by:"revenu"|less_than|filter_value:"2000"}}

Filtres supplémentaires

  • |count retourne le nombre de résultats de la requête
  • |done permet d'obtenir les demandes terminées uniquement. C'est à dire les demandes qui sont dans un statut final.
  • |exclude_value:"..." permet d'exclure des résultats la valeur spécifiée en paramètre.
  • |exclude_self permet d'exclure la demande de départ des résultats (fonctionne uniquement avec form_objects).
  • |filter_by_number:xxx permet de filtrer les résultats sur le numéro complet d'une demande/fiche. Le numéro complet se présente sous une forme 2-35.
  • |filter_by_internal_id:xxx permet de filtrer sur l’identifiant interne d'une demande/fiche (à la différence de |filter_by_number). Pour reprendre l'exemple de la ligne précédente, l'identifiant interne sera 35.
  • |filter_by_status:"Libellé du statut" permet de filtrer les résultats sur le statut donné.
  • |filter_by_user:form_user permet de limiter les résultats aux fiches et demandes liées à un usager précis.
  • |is_empty permet de vérifier que le contenu d'une requête est vide.
  • |order_by:"..." permet de trier les résultats sur le champ dont l'identifiant est passé en paramètre. Par exemple xxx|order_by:"nom" pour trier sur le champ dont l'identifiant est "nom".
  • |pending permet d'inclure uniquement les demandes ouvertes dans une requête sur des demandes.
  • |same_user permet de limiter les résultats aux demandes posées par le même utilisateur que la demande de départ.
  • |set_geo_center permet de définir le centre à utiliser pour le filtre géographique appliqué à une requête.
  • |with_custom_view:"..." permet d'appliquer les critères de la vue en question.
Exemple d'utilisation du filtre |count :
{{form_objects|filter_by:"nom"|filter_value:"entrouvert"|count}} --> retourne un entier

Une condition s'écrirait ainsi :

{% if form_objects|filter_by:"nom"|filter_value:"entrouvert"|count == 0 %}Aucune demande{% endif %}

 

Dernière mise à jour le 8 novembre 2023 15:32 — Éditer