Django自定义字段 - 自动添加COLLATE以进行查询

时间:2010-07-01 00:34:16

标签: django django-models custom-fields

我正在尝试创建一个自定义字段,该字段会自动将COLLATE信息添加到SQL查询的WHERE部分中:

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的原因是我想对这些字段执行查询并忽略任何变音符号。

1 个答案:

答案 0 :(得分:0)

您是否有机会使用MySQL 1.2.1p2?来自Django文档

  

如果您正在使用MySQLdb 1.2.1p2,Django的标准CharField类   即使使用utf8_bin整理,也会返回unicode字符串。然而,   TextField字段将作为array.array实例返回(来自   Python的标准阵列模块)。 Django可以做的事情不多   因为,再次,必要的信息   从中读取数据时,转换不可用   数据库。 MySQLdb 1.2.2中已修复此问题,因此如果您愿意   使用带有utf8_bin排序规则的TextField,升级到版本1.2.2和   然后处理字节串(这不应该太难)   如上所述是推荐的解决方案。