Django - запрос CharFields, игнорирующий диакритические знаки - PullRequest
0 голосов
/ 25 сентября 2019

Есть ли способ в 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')

1 Ответ

0 голосов
/ 25 сентября 2019

Итак, ответ на мой вопрос был действительно unaccent lookup, так как я использую PostgreSQL.Вот документы: https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/lookups/#unaccent

Это поле поиска не работает сразу, сначала нужно установить unaccent extension .

Кредиты на этот ответ - простой способ сделать это - создать пустую миграцию и добавить unaccent extension с 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')

И он работает так, как ожидалось:)

...