Django结合__unaccent和__search查询[英] Django Combining __unaccent and __search Lookups

本文是小编为大家收集整理的关于Django结合__unaccent和__search查询的处理方法,想解了Django结合__unaccent和__search查询的问题怎么解决?Django结合__unaccent和__search查询问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

因此,我试图在同一模型过滤器中使用__unaccent和__search,但是这样做时我会收到错误.我正在尝试使用术语" Pokemon"匹配"Pokémon"一词(请注意"é")

Game.objects.filter(title__unaccent__icontains="Pokemon")工作正常,但是当我使用Game.objects.filter(title__unaccent__search="Pokemon)时,我会收到以下错误:

at/autocomplete游戏/功能不活跃(tsquery)

不存在第1行:... Alesce(unaCcent(" main_game"." title"),''))))) @@(不活跃(P ... ^提示:无函数匹配给定名称和参数类型.您可能需要 添加明确的类型铸件.

我正在使用:

python 3.5

django 1.10

postgresql(安装了不活跃的扩展)

推荐答案

这样做的方法是在数据库中定义自定义搜索配置,例如:

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-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://www.itbaoku.cn/post/1764107.html