come posso filtrare sul secondo elemento di una tupla di tuple?
Domanda
Nel mio modello ho un campo:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
in cui i paesi è una tupla di tuple come questo:
COUNTRIES = (
('AF', _('Afghanistan')),
... e così via
Ora voglio filtrare un'istanza di quel modello, dal nome del paese.
Questa:
i = MyModel.objects.filter(country__iexact=query)
consente solo di filtrare in base al codice del paese.
Come faccio a filtrare dal nome del paese?
Soluzione
Non è possibile filtrare direttamente dal nome del paese (la choices
sono utilizzati al solo nell'interfaccia utente, non nel database).
Se si ottiene il nome completo come input, ricerca il codice nella COUNTRIES
tupla-di-tuple. Ad esempio:
# ... 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])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow