因此,我试图在相同的模型过滤器中使用__unaccent和__search,但是当这样做时,我会收到一个错误。我试图用“口袋妖怪”这个词来做一个过滤器,这个词和“口袋妖怪”相匹配(注意"é")
Game.objects.filter(title__unaccent__icontains="Pokemon")工作正常,但是当我使用Game.objects.filter(title__unaccent__search="Pokemon)时,我会得到以下错误:
ProgrammingError at /autocomplete-游戏/函数取消重音(Tsquery) 不存在第1行:...ALESCE(UNACCENT("main_game"."title"),‘’) @@ (UNACCENT(p.^提示:没有任何函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。
我正在使用:
Python 3.5
Django 1.10
PostgreSQL (安装了非重音扩展)
发布于 2017-02-27 13:50:10
这样做的方法是在数据库中定义自定义搜索配置,如下所示:
CREATE TEXT SEARCH CONFIGURATION unaccent ( COPY = french );
ALTER TEXT SEARCH CONFIGURATION unaccent ALTER MAPPING FOR hword, hword_part, word WITH unaccent, simple;我不是postgres专家,但这种配置适合我。有关更多详细信息,请查看如下教程:http://www.nomadblue.com/blog/django/from-like-to-full-text-search-part-ii/
而不是在Django中使用这个:
from django.contrib.postgres.search import SearchVector, SearchQuery
Game.objects.annotate(unaccent_title=SearchVector('title', config='unaccent')).filter(unaccent_title=SearchQuery('Pokemon', config='unaccent'))https://stackoverflow.com/questions/42421706
复制相似问题