¿Cómo se filtran en el segundo elemento de una tupla de tuplas?
Pregunta
En mi modelo que tengo un campo:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
Cuando los países es una tupla de tuplas como esta:
COUNTRIES = (
('AF', _('Afghanistan')),
... y así sucesivamente
Ahora quiero filtrar una instancia de ese modelo, por el nombre del país.
Este:
i = MyModel.objects.filter(country__iexact=query)
Sólo me permite filtrar por el código del país.
¿Cómo se filtran por nombre de país?
Solución
No se puede filtrar directamente por el nombre del país (el choices
se utilizan sólo en la interfaz de usuario, no en la base de datos).
Si recibe el nombre completo como una entrada, buscar el código en el COUNTRIES
tupla-de-tuplas. Por ejemplo:
# ... 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])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow