Projet

Général

Profil

Development #56089

adapter le filtre "filter_value" aux listes à choix multiple

Ajouté par Serghei Mihai il y a plus de 2 ans. Mis à jour il y a plus de 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
10 août 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à w.c.s. - Development #6108: Ajouter un st.Not()Fermé05 décembre 2014

Actions

Révisions associées

Révision d59ee3cb (diff)
Ajouté par Serghei Mihai il y a plus de 2 ans

variables: handle filtering lists by any of values (#56089)

Historique

#2

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").

#3

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

#4

Mis à jour par Serghei Mihai il y a plus de 2 ans

#5

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.

#6

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
#7

Mis à jour par Serghei Mihai il y a plus de 2 ans

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.

#8

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 (?).

#9

Mis à jour par Serghei Mihai il y a plus de 2 ans

En effet, zappé la partie SQL.

#10

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
#11

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'

#12

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.

#13

Mis à jour par Serghei Mihai il y a plus de 2 ans

  • Statut changé de Solution proposée à En cours
#15

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)

?

#16

Mis à jour par Serghei Mihai il y a plus de 2 ans

#17

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.

#18

Mis à jour par Serghei Mihai il y a plus de 2 ans

Patch rebasé après #6108.

#19

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.

#20

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)
#21

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

Formats disponibles : Atom PDF