как я могу фильтровать второй элемент в кортеже кортежей?

StackOverflow https://stackoverflow.com/questions/1745919

  •  20-09-2019
  •  | 
  •  

Вопрос

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

   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])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top