FieldError:CharField不支持查找“unaccent”或不允许在字段上加入

问题描述 投票:0回答:1

我正在获得FieldError: Unsupported lookup 'unaccent' for CharField or join on the field not permitted。任何帮助表示赞赏。有任何想法吗?

#template
<form class="navbar-form navbar-left" method="GET" action="{% url 'search' %}" value="{{request.get.q}}">
        <div class="form-group">
          <input type="text" name="q" class="form-control" placeholder="Search" >
        </div>
          <button type="submit" class="btn btn-default">Submit</button>
      </form>

#views.py
def Search(request):
    queryset_list=Testimony.objects.all().order_by('timestamp')
    if request.user.is_staff or request.user.is_superuser:
        queryset_list=Testimony.objects.all()

    print('1')
    if request.method=='GET':
        query=request.GET.get("q")
        print('2')
        queryset_list = Testimony.objects.filter(
            Q(title__unaccent__lower__trigram_similar=query)|
            Q(body__unaccent__lower__trigram_similar=query)|
            Q(username__unaccent__lower__trigram_similar=query)
            #Q(firstname__unaccent__lower__trigram_similar__icontains=query)
            ).distinct().order_by('timestamp')


    print('3')
    paginator = Paginator(queryset_list, 20)
    page_request_var="page"
    page=request.GET.get(page_request_var)
    try:
        queryset=paginator.page(page)
    except PageNotAnInteger:
        queryset=paginator.page(1)
    except EmptyPage:
        queryset=paginator.page(paginator_num.pages)

    print('4')
    context={
    "object_list": queryset,
    "title":"list",
    "page_request_var":page_request_var,
    }

    return render(request, 'search.html', {'queryset_list':queryset_list})

追溯指向:Q(username__unaccent__lower__trigram_similar=query)

django
1个回答
0
投票

对于Django至少1.11(source)和postgresql至少8.5(source

  • 在INSTALLED_APPS(settings.py)中添加'django.contrib.postgres'行
  • 激活'unaccent'扩展名 运行“CREATE EXTENSION unaccent;”在PgAdmin(source)或...... 创建空迁移(./manage.py --empty your.application.name)并使用以下内容编辑生成的文件(source),最后运行./manage.py migrate:

other reference

from django.contrib.postgres.operations import UnaccentExtension

class Migration(migrations.Migration):

dependencies = [
    (<snip>)
]

operations = [
    UnaccentExtension()
]

琐事:它在admin.py上不起作用,但在其他.py文件中有效。

© www.soinside.com 2019 - 2024. All rights reserved.