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?

¿Fue útil?

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
scroll top