【问题标题】:Django ORM with PostgreSQL return wrong data using icontains带有 PostgreSQL 的 Django ORM 使用 icontains 返回错误的数据
【发布时间】:2021-12-25 16:41:39
【问题描述】:

我的模型是。

class Seller(models.Model):
    supplierId = models.IntegerField('Supplier ID', primary_key=True)
    supplierName = models.CharField('Поставщик', max_length=255, null=True, blank=True)
    inn = models.CharField('ИНН', max_length=255, null=True, blank=True)
    ogrn = models.CharField('ОГРН', max_length=255, null=True, blank=True)
    legalAddress = models.CharField('Юридический адрес', max_length=512, null=True, blank=True)

我有 2 条供应商名称相同的记录='Смирнова Ольга Александровна'。

sellers = Seller.objects.filter(supplierName__icontains='Смирнова Ольга Александровна')
print(sellers.count()) # return 1
sellers = Seller.objects.filter(supplierName__contains='Смирнова Ольга Александровна')
print(sellers.count()) # return 2
sellers = Seller.objects.filter(supplierName='Смирнова Ольга Александровна')
print(sellers.count()) # return 2

我也尝试使用供应商名称__search,但它也返回不正常的数据。
icontains 不仅在本例中返回错误数据。

我尝试在本地 Windows 计算机上创建相同的 postgresql 数据库,其中包含相同的模型和记录。它工作正常。有问题的数据库正在 ubuntu 20.04 上运行

我能用它做什么?我需要这个才能在我的网站上进行正确搜索。

【问题讨论】:

  • 您可能为数据库设置了错误的排序规则设置。
  • @WillemVanOnsem 谢谢!问题出在排序规则设置中。

标签: django database postgresql ubuntu


【解决方案1】:

问题出在排序规则设置中

我删除并使用新的排序规则再次创建 postgresql 集群。在没有创建集群的情况下,他没有看到俄罗斯编码。

dpkg-reconfigure locales 
# install your locales
pg_dropcluster --stop 14 main 
# It will delete your cluster with all data, so backup it before
pg_createcluster --locale ru_RU.UTF-8 --start 14 main
# 14 - your postgres veriosn, main - your cluster name (main by default)

如果 psql 中存在语言环境,您还可以更改 django 中字段的 db_collat​​ion \l

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多