comment puis-je filtrer sur le deuxième élément dans un tuple de tuples?
Question
Dans mon modèle, j'ai un champ:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
Lorsque les pays est un tuple de tuples comme ceci:
COUNTRIES = (
('AF', _('Afghanistan')),
... et ainsi de suite
Maintenant, je veux filtrer un exemple de ce modèle, par le nom du pays.
i = MyModel.objects.filter(country__iexact=query)
ne me laisse filtrer par le code du pays.
Comment puis-je filtrer par nom du pays?
La solution
Vous ne pouvez pas filtrer directement par le nom du pays (le choices
ne sont utilisés que dans l'interface utilisateur, et non pas dans la base de données).
Si vous obtenez le nom complet comme entrée, rechercher le code dans le COUNTRIES
tuple-de-tuples. Par exemple:
# ... initialize a lookup dictionary
country_to_id_dict = dict((t[1], t[0]) for t in COUNTRIES)
# ... use the dictionary in the query
i = MyModel.objects.filter(country__exact=country_to_id_dict[query])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow