2009-11-17 230 views
2

在我的模型我有一個字段:如何過濾元組元組中的第二個元素?

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

如果國家是元組的這樣一個元組:

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

...等等

現在我想過濾的該模型的實例,由國名命名。

此:

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

只讓我由國家代碼過濾。

如何按國名過濾?

+0

我認爲你在那裏缺少一些代碼。你能告訴我在哪裏查詢被定義? – 2009-11-17 00:51:08

+0

在 Q = request.GET中[ 'Q']下() 但是這是不相關的,我能以及硬編碼的字符串的示例中,像: I = MyModel.objects.filter(country__iexact = '阿富汗' ) – miernik 2009-11-17 01:31:54

回答

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]) 
+0

嗯,我試過這個,但是我得到一個異常類型:KeyError,其country_to_id_dict看起來像這樣: {:'AF',:'AL', ...等等。 也許它因爲在每個元組的第二個元素是一個翻譯文本,因爲: 從django.utils.translation進口ugettext_lazy作爲_ – miernik 2009-11-17 01:22:14

+1

行,country_to_dict的微小修改工作: country_to_id_dict =字典((T [1 ] [:],t [0])for t in COUNTRIES) 謝謝。 對於不區分大小寫的情況更好(查詢在其他地方被摺疊爲小寫): country_to_id_dict = dict((t [1] [:]。lower(),t [0])用於COUNTRIES中的t) – miernik 2009-11-17 01:43:37

相關問題