【发布时间】:2021-09-22 10:13:02
【问题描述】:
PostgreSQL 13.4
Django 3.2
macOS 11.2
我尝试实现一个搜索功能,通过“名称”字段查找模型实例。
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-objects:
Q(name__istartswith='бух')
但没有得到任何结果
尝试使用postgres全文搜索 通过添加:
'django.contrib.postgres',
到 settings.py 中的 INSTALLED_APPS
并以这种方式重复搜索:
>>> LatestConfiguration.objects.filter(name__icontains='бух')
<QuerySet []>
其他人也有同样的错误吗?
【问题讨论】:
-
你的数据库的collation是什么?
-
显示 lc_collate; C
-
显示 lc_ctype; C
-
似乎我需要使用 en_US.UTF8 排序规则重新创建我的数据库集群:(
标签: python django postgresql