2010-07-01 119 views
3

我試圖創建一個自定義字段,會自動添加資料整理成SQL查詢的WHERE部分:Django的自定義字段 - 自動添加COLLATE查詢

class IgnoreDiacriticsField(models.TextField): 

    def get_prep_lookup(self, lookup_type, value): 
     if lookup_type == 'exact': 
      return ' "' + self.get_prep_value(value) + '" COLLATE utf8_general_ci' 

當我執行查詢是這樣的:

result = ModelClass.objects.filter(field='value') 

然後沒有發現任何東西,即使查詢(print result.query)有效且匹配多行。難道我做錯了什麼?

我添加整理iformation的原因是我希望對這些字段執行查詢並忽略任何變音符號。

+0

您確定您嘗試整理的字段不是二進制嗎? – Nazariy 2012-04-11 15:54:41

回答

0

你是否在使用MySQL 1.2.1p2?從Django文檔

如果你使用MySQLdb的1.2.1p2,Django的標準CharField類 將返回Unicode字符串,即使utf8_bin整理。但是, TextField字段將作爲array.array實例返回(來自 Python的標準數組模塊)。 Django對 可以做的並不多,因爲從 數據庫讀入數據時,再次無法獲得進行必要的 轉換所需的信息。此問題已修復MySQLdb的1.2.2,所以如果你想使用 與文本字段整理utf8_bin,升級到1.2.2版本, 然後用字節串處理(這應該不是太困難) 如上所述是推薦解決方案