【问题标题】:Django custom field - automatically add COLLATE to queryDjango 自定义字段 - 自动添加 COLLATE 到查询
【发布时间】:2010-07-01 00:34:15
【问题描述】:

我正在尝试创建一个自定义字段,该字段会自动将 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) 是有效的并且匹配了几行。我做错了吗?

我添加排序规则信息的原因是我想对这些字段执行查询并忽略任何变音符号。

【问题讨论】:

  • 您确定您要整理的字段不是二进制的吗?

标签: django django-models custom-fields


【解决方案1】:

您是否正在使用 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 和 然后处理字节串(这应该不会太难) 如上所述是推荐的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多