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
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
- |equal|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé correspond exactement à la valeur xxx
- |i_equal|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé correspond à la valeur xxx, en ignorant les éventuelles différences de casse.
- |not_equal|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé est différent de la valeur xxx
- |less_than|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé est inférieur à la valeur xxx
- |greater_than|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé est supérieur à la valeur xxx
- |less_than_or_equal|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé est inférieur ou égal à la valeur xxx
- |greater_than_or_equal|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles le champ testé est supérieur ou égal à la valeur xxx
- |in|filter_value:"xxx|yyy" : renvoie les demandes/fiches pour lesquelles le champ testé correspond à la valeur xxx ou à la valeur yyy
- |not_in|filter_value:"xxx|yyy" : renvoie les demandes/fiches pour lesquelles le champ testé ne correspond ni à la valeur xxx ni à la valeur yyy
- |icontains|filter_value:"xxx" : renvoie les demandes/fiches pour lesquelles la valeur du champ testé contient xxx, en ignorant les éventuelles différences de casse. À la différence de |i_equal, ce filtre retournera les demandes dont une sous-chaine correspond, ex : si "xxx" est "Rue", les champs "rue des Cerisiers", "rue des Lilas", "avenue de Rueil-Malmaison", mais pas "avenue de Chatou".
- |absent : renvoie les demandes/fiches pour lesquelles le champ testé n'est pas rempli
- |existing : renvoie les demandes/fiches pour lesquelles le champ testé est rempli
- |between|filter_value:"1|5" : renvoie les demandes/fiches pour lesquelles le champ testé est supérieur ou égal à 1 et inférieur à 5
{{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_distance:xxx permet de filtrer les demandes/fiches selon leur distance à un point (de la demande/fiche à l'origine de la requête si
form_objects
est utilisé, d’un point arbitraire si renseigné par la filtre|set_geo_center
). La distance doit être exprimée en mètres. C’est équivalent à|filter_by:"distance"|filter_value:xxx
. - |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. C'est équivalent à
|filter_by:"internal_id"|filter_value:xxx
. - |filter_by_status:"Libellé du statut" permet de filtrer les résultats sur le statut donné; c’est équivalent à
|filter_by:"status"|filter_value:"Libellé du statut"
. - |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; c’est équivalent à
|filter_by:"number"|filter_value:xxx
. - |filter_by_user:form_user permet de limiter les résultats aux fiches et demandes liées à un usager précis; c’est équivalent à
|filter_by:"user"|filter_value:form_user
. En complément, le filtre accepte également l’adresse électronique de l’usager ainsi que l’identifiant unique qui lui est associé (uuid). - |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:xxx permet de définir le centre à utiliser pour le filtre géographique appliqué à une requête (
|filter_by_distance
); le paramètre attendu est une demande/fiche dont le géocodage sera donc utilisé comme référence. - |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 %}