как я могу фильтровать второй элемент в кортеже кортежей?
Вопрос
В моей модели у меня есть поле:
country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)
Где COUNTRIES — это кортеж из таких кортежей:
COUNTRIES = (
('AF', _('Afghanistan')),
...и так далее
Теперь я хочу отфильтровать экземпляр этой модели по названию страны.
Этот:
i = MyModel.objects.filter(country__iexact=query)
позволяет мне фильтровать только по коду страны.
Как я могу фильтровать по названию страны?
Решение
Вы не можете фильтровать напрямую по названию страны (значок choices
используются только в пользовательском интерфейсе, а не в базе данных).
Если вы получили полное имя в качестве входных данных, найдите код в COUNTRIES
кортеж кортежей.Например:
# ... 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])
Не связан с StackOverflow