Projet

Général

Profil

Bug #63628

filter_value et exclude_value ne font pas ce qu'il faut avec None

Ajouté par Thomas Noël il y a environ 2 ans. Mis à jour il y a environ 2 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 avril 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

On se retrouve avec des "= NULL" ou "!= NULL" dans le SQL, alors qu'il faut des "IS NULL" et "IS NOT NULL"


Fichiers

Révisions associées

Révision 9f3af4ae (diff)
Ajouté par Lauréline Guérin il y a environ 2 ans

misc: fix filter/exclude_value templatetag with None (#63628)

Historique

#1

Mis à jour par Thomas Noël il y a environ 2 ans

  • Assigné à Thomas Noël supprimé

Je pensais que c'était "facile" comme

--- a/wcs/sql.py
+++ b/wcs/sql.py
@@ -195,6 +195,8 @@ class Equal(Criteria):
     sql_op = '='

     def as_sql(self):
+        if self.value is None:
+            return '%s IS NULL' % self.attribute
         if self.value in ([], ()):
             return 'ARRAY_LENGTH(%s, 1) IS NULL' % self.attribute
         return super().as_sql()
@@ -225,6 +227,8 @@ class NotEqual(Criteria):
     def as_sql(self):
         if self.field and getattr(self.field, 'block_field', None):
             return super().as_sql()
+        if self.value is None:
+            return "%s IS NOT NULL" % self.attribute
         return "(%s is NULL OR %s)" % (self.attribute, super().as_sql())

mais ça ne doit pas se jouer à ce niveau, un test ajouté dans tests/test_formdata.py (test_lazy_formdata_queryset_filter) du genre

  +    queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value(None)
  +    assert queryset.count == 5

ne passe pas, le count renvoie 0 alors qu'il y a 5 demandes sans valeur dans le champ datefield.

Je dois me tromper dans mon analyse, peut-être qu'il faut jouer directement dans apply_filter_value pour lui faire générer des Null/NotNull ?

#3

Mis à jour par Lauréline Guérin il y a environ 2 ans

proposition, passer du Null et du NotNull au moment du build des critères

#4

Mis à jour par Thomas Noël il y a environ 2 ans

  • Statut changé de Solution proposée à Solution validée

C'est vert, et c'est effectivement un meilleur moment pour faire l'opération ; ça me semble bien.

#5

Mis à jour par Thomas Noël il y a environ 2 ans

  • Tracker changé de Development à Bug
#11

Mis à jour par Lauréline Guérin il y a environ 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 9f3af4ae84a1d6d30cf648fbe1fef2e45edc2b97
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Thu Apr 7 10:26:10 2022 +0200

    misc: fix filter/exclude_value templatetag with None (#63628)
#13

Mis à jour par Transition automatique il y a environ 2 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#14

Mis à jour par Transition automatique il y a presque 2 ans

Automatic expiration

Formats disponibles : Atom PDF