как я могу отфильтровать второй элемент в кортеже кортежей? - PullRequest
2 голосов
/ 17 ноября 2009

В моей модели у меня есть поле:

   country = models.CharField(_('Country'), max_length=2, choices=COUNTRIES)

Где СТРАНЫ - это кортеж таких кортежей:

COUNTRIES = (
    ('AF', _('Afghanistan')),

... и т. Д.

Теперь я хочу отфильтровать экземпляр этой модели по названию страны.

Это:

   i = MyModel.objects.filter(country__iexact=query)

позволяет фильтровать только по коду страны.

Как мне выполнить фильтрацию по названию страны?

1 Ответ

4 голосов
/ 17 ноября 2009

Вы не можете фильтровать напрямую по названию страны (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])
...