如何在元组的元组中按第二个元素过滤?

2 投票
1 回答
1115 浏览
提问于 2025-04-15 16:05

在我的模型里,有一个字段:

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

这里的 COUNTRIES 是一个包含多个元组的元组,像这样:

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

... 还有其他类似的内容

现在我想根据国家名称来筛选这个模型的实例。

这样做:

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

只能让我通过国家代码来筛选。

我该如何通过国家名称来筛选呢?

1 个回答

4

你不能直接通过国家名称来筛选(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])

撰写回答