Project

General

Profile

Support #41929

Avoir une expression Django pour dire "toutes ces variables définies sont différentes"

Added by Thomas Noël 2 months ago. Updated 2 months ago.

Status:
Nouveau
Priority:
Bas
Assignee:
-
Category:
-
Target version:
-
Start date:
21 Apr 2020
Due date:
% Done:

0%

Patch proposed:
No
Planning:
No
Demande du club utilisateur:
No

Description

Cas d'usage : sur un formulaire, j'ai n champs form_var_lieu_1, form_var_lieu_2, ..., form_var_lieu_n qui sont choisis parmi une même liste de lieux.

Dans le workflow, je veux savoir s'il s'agit de n lieux différents.

Aurions-nous une idée pour exprimer cela en Django ? (sans recourir à une suite interminable de tests)

History

#2 Updated by Thomas Noël 2 months ago

Plus précisément : je veux savoir combien de lieux différents ont été choisis. On imagine une notion de set() mais comment la traduire en Django.

#3 Updated by Thomas Noël 2 months ago

  • Priority changed from Normal to Bas

Il n'y a sans doute pas de jolie solution avec Django.

Les idées en vrac sur le salon :
  • fabriquer une première variable intermédiaire form_var_lieux = {{form_var_lieu1_raw}},{{form_var_lieu2_raw}},{{form_var_lieu3_raw}}
  • avoir un templatetags "set" pour construire un set d'une liste : {{form_var_lieux|split|set|length}}

Mais le plus "sûr" reste Python avec :

len(set([v for v in [locals().get('form_var_lieu_%s' % i) for i in range(1, 6)] if v is not None]))

Bref, ticket à fermer d'ici quelques jours si personne n'a d'idée.

#4 Updated by Thomas Noël 2 months ago

Thomas Noël a écrit :

len(set([v for v in [locals().get('form_var_lieu_%s' % i) for i in range(1, 6)] if v is not None]))

Ne fonctionne pas, locals() ne contient plus les form_var_lieu_n dans une list-comprehension. (et globals() non plus car les form_var sont dans locals à l'origine).

#5 Updated by Benjamin Dauvergne 2 months ago

  • Priority changed from Bas to Normal
(lambda d: len(set([v for v in [d.get('form_var_lieu_%s' % i) for i in range(1, 6)] if v is not None])))(locals())

Church power !

#6 Updated by Benjamin Dauvergne 2 months ago

  • Priority changed from Normal to Bas

Also available in: Atom PDF