Поиск без учета регистра не работает на Django (Postgres) с нелатинскими символами

PostgreSQL 13.4
Django 3.2
MacOS 11.2

Я пытаюсь реализовать функцию поиска экземпляра модели по полю "name".

models.py

    class LatestConfiguration(models.Model):

        # Primary key
        name = models.CharField(verbose_name='Имя',
                                max_length=150,
                                unique=True,
                                primary_key=True)

Кодировка базы данных - UTF8:

➜  ~ psql <DB_NAME> -c 'SHOW SERVER_ENCODING'
 server_encoding 
-----------------
 UTF8
(1 row)

База данных содержит записи, например:

Бухгалтерия для Казахстана, редакция 3.0

Я пытаюсь найти экземпляр модели следующим образом:

 LatestConfiguration.objects.filter(name__icontains='Бух')

вывод в порядке:

>>> LatestConfiguration.objects.filter(name__icontains='Бух')
<QuerySet [Бухгалтерия для Казахстана, редакция 3.0]>

Я перевел первую букву в слове "Бух" на "бух" и повторил поиск

>>> LatestConfiguration.objects.filter(name__icontains='бух')
<QuerySet []>

теперь я получаю пустой кверисет, но не должен

Я также попробовал Q-объекты:

Q(name__istartswith='бух')

но не получил никаких результатов

Попробовал использовать полнотекстовый поиск postgres добавив:

    'django.contrib.postgres',

к INSTALLED_APPS в settings.py

и повторить поиск таким образом:

>>> LatestConfiguration.objects.filter(name__icontains='бух')
<QuerySet []>

Кто-нибудь еще получил такую же ошибку?

В первую очередь я просмотрел все системные локали выполнив

locale -a

У меня не было необходимой локали ru_RU.UTF-8 поэтому я сделал ее по

locale-gen ru_RU.UTF-8

Перезапустили postgres, чтобы он увидел новую локаль

service postgresql restart

вошел в систему как администратор

sudo -u postgres psql

и создал новую БД таким образом

CREATE DATABASE "<Mydatabasename>" WITH ENCODING 'UTF8' LC_COLLATE='ru_RU.UTF-8' LC_CTYPE='ru_RU.UTF-8' TEMPLATE=template0;
Вернуться на верх