Development #56089
adapter le filtre "filter_value" aux listes à choix multiple
0%
Description
Typiquement le cas dans #56071 où il est souhaité de pouvoir filtrer les fiches dont un champ de type "liste à choix multiple" contient une valeur particulière.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 2 ans
On imagine des situations où on voudrait matcher sur une liste précise de valeurs ? (parce que moi pas et du coup je serais plutôt pour en rester à filter_value, qu'il adapte son comportement sur les champs "liste à choix multiple").
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Sujet changé de avoir un filtre "filter_value_contains" pour filtrer les fiches dont un champ contient une valeur à adapter le filtre "filter_value" aux listes à choix multiple
Frédéric Péters a écrit :
On imagine des situations où on voudrait matcher sur une liste précise de valeurs ?
Moi non plus.
je serais plutôt pour en rester à filter_value, qu'il adapte son comportement sur les champs "liste à choix multiple"
Yep. Je mets à jour le titre du ticket
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Fichier 0001-variables-handle-filtering-lists-by-one-of-values-56.patch 0001-variables-handle-filtering-lists-by-one-of-values-56.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a plus de 2 ans
+ # match againts first value only + criterias = Intersects(field_id, value[:1], field=field)
Avec les tests présents je capte bien que ça correspond à :
+ tmpl = Template('{{forms|objects:"foobarlazy"|filter_by:"items"|filter_value:"1|2"|count}}')
Mais ignorer les paramètres ne m'a pas l'air d'être le comportement qu'on souhaiterait; on voudra plutôt soit que toutes les valeurs matchent, soit une des valeurs, jamais "je file plusieurs valeurs mais regarde que la première merci".
(quant à choisir entre les deux options qui ont du sens, je ne sais pas)
Aussi il y aurait à gérer la branche exclude.
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
- Patch proposed changé de Oui à Non
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Fichier 0001-variables-handle-filtering-lists-by-any-of-values-56.patch 0001-variables-handle-filtering-lists-by-any-of-values-56.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Frédéric Péters a écrit :
Mais ignorer les paramètres ne m'a pas l'air d'être le comportement qu'on souhaiterait; on voudra plutôt soit que toutes les valeurs matchent, soit une des valeurs, jamais "je file plusieurs valeurs mais regarde que la première merci".
(quant à choisir entre les deux options qui ont du sens, je ne sais pas)
Je pars du plus simple: vérification si une des valeurs matche.
Aussi il y aurait à gérer la branche exclude.
Effectivement. Patch et branche à jour.
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
- Patch proposed changé de Oui à Non
print() et pas de gestion SQL (?).
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Fichier 0001-variables-handle-filtering-lists-by-any-of-values-56.patch 0001-variables-handle-filtering-lists-by-any-of-values-56.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
En effet, zappé la partie SQL.
Mis à jour par Frédéric Péters il y a plus de 2 ans
Pourquoi un nouveau NotIntersects plutôt qu'utiliser Not & Intersects qui existent ?
question qui est peut-être aussi celle-ci : pourquoi sur une valeur vide on a le même code dans ce nouveau NotIntersects que le code qui existe dans Intersects ?
if not self.value: return 'ARRAY_LENGTH(%s, 1) IS NULL' % self.attribute
Mis à jour par Serghei Mihai il y a plus de 2 ans
Frédéric Péters a écrit :
Pourquoi un nouveau NotIntersects plutôt qu'utiliser Not & Intersects qui existent ?
Comme on a NotEqual
et NotContains
, j'ai suivi le même principe.
question qui est peut-être aussi celle-ci : pourquoi sur une valeur vide on a le même code dans ce nouveau NotIntersects que le code qui existe dans Intersects ?
Betise de ma part, ça doit être plutôt un: return 'FALSE'
Mis à jour par Frédéric Péters il y a plus de 2 ans
Comme on a NotEqual et NotContains, j'ai suivi le même principe.
Je serais plutôt pour ne pas.
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Fichier 0001-variables-handle-filtering-lists-by-any-of-values-56.patch 0001-variables-handle-filtering-lists-by-any-of-values-56.patch ajouté
- Statut changé de En cours à Solution proposée
Ok.
Mis à jour par Frédéric Péters il y a plus de 2 ans
Misère fallait dire qu'il n'y avait pas de Not pas SQL (j'avais oublié). Tu peux ajouter cette partie dans #6108, avec test adéquat ?
Et de ce côté, tu pourrais simplifier le code pour ne pas utiliser NotEqual, que le code soit :
# code qui crée criterias [...] if exclude: criterias = Not(criterias)
?
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Lié à Development #6108: Ajouter un st.Not() ajouté
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Statut changé de Solution proposée à En cours
Ok, je le rajoute l'opérateur dans #6108.
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Fichier 0001-variables-handle-filtering-lists-by-any-of-values-56.patch 0001-variables-handle-filtering-lists-by-any-of-values-56.patch ajouté
- Statut changé de En cours à Solution proposée
- Assigné à mis à Serghei Mihai
Patch rebasé après #6108.
Mis à jour par Benjamin Dauvergne il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Toutes les remarques me semblent levées.
Mis à jour par Serghei Mihai il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit d59ee3cb650baaa06215dd21fcdcc585abe712b8 (HEAD -> main, origin/main, origin/HEAD) Author: Serghei Mihai <smihai@entrouvert.com> Date: Tue Aug 10 16:02:54 2021 +0200 variables: handle filtering lists by any of values (#56089)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
variables: handle filtering lists by any of values (#56089)