how can I filter on the second element in a tuple of tuples?
Question
In my model I have a field:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
Where COUNTRIES is a tuple of tuples like this:
COUNTRIES = (
('AF', _('Afghanistan')),
... and so on
Now I want to filter an instance of that model, by the country name.
This:
i = MyModel.objects.filter(country__iexact=query)
only lets me filter by the country code.
How can I filter by country name?
Solution
You cannot filter directly by the country name (the choices
are only used in the UI, not in the database).
If you get the full name as an input, lookup the code in the COUNTRIES
tuple-of-tuples. For example:
# ... 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])
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow