【问题标题】:Django - query CharFields ignoring diacritic signsDjango - 忽略变音符号查询 CharFields
【发布时间】:2019-09-25 19:42:59
【问题描述】:

有没有办法在 Django 中过滤一些 CharField/TextField 使用仅包含 ASCII 字符但匹配数据库中可能包含非 ASCII 字符的记录的字符串?

例如。我想用下面的代码找到一个name 设置为科隆的城市:

from django.db import models

class City(models.Model):
    name = models.CharField(max_length=30)

City.objects.filter(name__<some lookup>='koln')

【问题讨论】:

    标签: django django-orm


    【解决方案1】:

    所以,我的问题的答案实际上是 unaccent 查找,因为我使用的是 PostgreSQL。 以下是文档:https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/lookups/#unaccent

    这个查找字段不能马上工作,第一个需要安装unaccent extension。

    归功于this answer - 简单的方法是创建空迁移并添加unaccent extension with Django。

    python manage.py makemigrations --empty <app_name>
    

    然后在新的迁移文件中:

    from django.db import migrations
    from django.contrib.postgres.operations import UnaccentExtension
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('app_name', '<parent_migration>'),
        ]
    
        operations = [
            UnaccentExtension(),
        ]
    
    

    现在我可以像这样进行所需的查询:

    City.objects.filter(name__unaccent__iexact='koln')
    

    它按预期工作:)

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 2013-08-28
      • 2018-06-25
      • 1970-01-01
      • 2011-12-09
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多