Support #41929
Avoir une expression Django pour dire "toutes ces variables définies sont différentes"
0%
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)
Historique
Mis à jour par Thomas Noël il y a environ 4 ans
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.
Mis à jour par Thomas Noël il y a environ 4 ans
- Priorité changé de Normal à 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.
Mis à jour par Thomas Noël il y a environ 4 ans
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).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Priorité changé de Bas à 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 !