2010-07-01 117 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版本, 然后用字节串处理(这应该不是太困难) 如上所述是推荐解决方案