Projet

Général

Profil

Support #41929

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

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

Statut:
Nouveau
Priorité:
Bas
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
21 avril 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non
Club:
Non

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

#2

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.

#3

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.

#4

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).

#5

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 !

#6

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Priorité changé de Normal à Bas

Formats disponibles : Atom PDF