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:"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
- |not_equal
- |less_than
- |greater_than
- |less_than_or_equal
- |greater_than_or_equal.
{{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 filtrer 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 %}