Bug #59786
Donnée calculée associée à une source de données, prefill de type bool
0%
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
fields: record_error if computed field value has a bad type (#59786)
Historique
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 :)
Mis à jour par Lauréline Guérin il y a plus de 2 ans
- Fichier 0001-sql-don-t-fail-on-get-if-id-is-an-int-59786.patch 0001-sql-don-t-fail-on-get-if-id-is-an-int-59786.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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é.
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
Mis à jour par Lauréline Guérin il y a plus de 2 ans
- Fichier 0002-fields-record_error-if-computed-field-value-has-a-ba.patch 0002-fields-record_error-if-computed-field-value-has-a-ba.patch ajouté
- Fichier 0001-sql-don-t-fail-on-get-if-id-is-an-int-59786.patch 0001-sql-don-t-fail-on-get-if-id-is-an-int-59786.patch ajouté
- Statut changé de Solution validée à Solution proposée
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é.
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)
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
sql: don't fail on get if id is an int (#59786)