Projet

Général

Profil

Bug #59786

Donnée calculée associée à une source de données, prefill de type bool

Ajouté par Lauréline Guérin 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:
16 décembre 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

cf #59324

Avoir une donnée calculée branchée sur le source de données, avec un prefill de type bool
(par exemple: {{ cards|objects:"foobar"|first|get:"form_var_bool" }} où form_var_bool est un BoolField)

Sur l'inspect de la demande, ou si on affiche la valeur de la donnée calculée dans un champ commentaire dans le formulaire, plantage sur:

Exception:
  type = '<class 'psycopg2.errors.InvalidTextRepresentation'>', value = 'ERREUR:  syntaxe en entrée invalide pour l'entier : « True »
LINE 5:                             WHERE id = 'True'
                                               ^


Fichiers

Révisions associées

Révision 73237402 (diff)
Ajouté par Lauréline Guérin il y a plus de 2 ans

sql: don't fail on get if id is an int (#59786)

Révision 76090c68 (diff)
Ajouté par Lauréline Guérin il y a plus de 2 ans

fields: record_error if computed field value has a bad type (#59786)

Historique

#2

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

    def get(cls, id, ignore_errors=False, ignore_migration=False):
        try:
            int(id)
        except (TypeError, ValueError):
            if ignore_errors:
                return None
            else:
                raise KeyError()
>>> int(True)
1

Dommage :)

#3

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

#4

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

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

int(str(id)) j'avoue que c'est rusé.

#5

Mis à jour par Frédéric Péters il y a plus de 2 ans

Il faudrait peut-être remonter à l'admin qu'il s'est planté dans la configuration, ça ne va pas d'avoir une source de données et une valeur qui n'y est pas, type :

--- a/wcs/forms/root.py
+++ b/wcs/forms/root.py
@@ -669,6 +669,7 @@ class FormPage(Directory, FormTemplateMixin):
    def handle_computed_fields(self, magictoken, fields):
[...]
                         continue
                     else:
                         value = get_publisher().get_cached_complex_data(value)
+                    # s'il y a une source de données et que la valeur n'est pas un entier, record_error
                     computed_values[field.id] = value
                     mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
                         {str(field.id): computed_values[field.id]}, field=field
#7

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

Je me suis mis à hésiter un peu, en mode peut-être qu'on accepte du préremplissage aussi avec le libellé mais dans le test de #58913 on ne fait pas ça donc si jamais ça marchait c'était de toute façon pas volontaire et autant bloquer la possibilité.

#8

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 76090c686358d257e881ee76a2cd8e1e36302053
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Thu Dec 16 14:31:36 2021 +0100

    fields: record_error if computed field value has a bad type (#59786)

commit 73237402b826b9c671de3f820e7d0cfb396c5edc
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Thu Dec 16 14:31:11 2021 +0100

    sql: don't fail on get if id is an int (#59786)
#9

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

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

Automatic expiration

Formats disponibles : Atom PDF