【问题标题】:FieldError: Unsupported lookup for CharField or join on the field not permitted on DjangoFieldError:不支持查找 CharField 或加入 Django 上不允许的字段
【发布时间】:2022-01-05 04:27:00
【问题描述】:

为什么会出现此错误:FieldError: Unsupported lookup 'unaccent' for CharField or join on the field not permitted

信息

语言:Python
平台:Django
数据库:PostgreSQL

代码

查看:

def search(request):
    query = request.GET.get("query")
    searched = Book.objects.filter(title__unaccent__icontains=query) # Error here
    return render(request, "main/search.html", {
        "query": query,
        "searched": searched,
    })

预期输出

取消重音查询并在数据库中搜索无重音版本。

说明

我在使用django docs 中提到的高级搜索功能时尝试使用__unaccent 查询数据库时收到错误FieldError: Unsupported lookup 'unaccent' for CharField or join on the field not permitted

【问题讨论】:

    标签: python django postgresql search


    【解决方案1】:

    如果 unaccent 或任何其他 PostgreSQL 特定查找,首先

    1. django.contrib.postgres 添加到您的settings.py INSTALLED_APPS
    2. 在 PostgreSQL 上激活查找扩展。 For unaccent, click here(在“使用”下),或者您可以
    3. 执行扩展的迁移操作。对于unaccent,扩展名为UnaccentExtension。您可以通过
    4. 来执行此迁移操作
    $ ./manage.py makemigrations --empty your_app_name
    

    然后转到在您的应用程序的 migrations 文件夹中创建的迁移文件。如果您不确定哪个是刚刚创建的文件,最新的文件通常是您创建的文件。要格外小心,请查看运行上述命令后显示的终端输出。它将在标题Migrations for your_app_name 下包含文件名。

    然后,在该文件中,删除内容并粘贴:

    from django.contrib.postgres.operations import UnaccentExtension
    from django.db import migrations
    
    
    class Migration(migrations.Migration):
    
        dependencies = [
            ('<your_app_name>', '<previous_migration_file>'),
        ]
    
        operations = [
            UnaccentExtension()
        ]
    
    

    在上面的代码中,将&lt;your_app_name&gt;替换为您的应用名称,将previous_migration_file替换为此之前的迁移文件的名称,不包括.py文件扩展名。查找之前的迁移文件,查看你所在的迁移文件的编号(比如0008_auto_20220104_13520008是文件的编号)减去1(比如@的之前的文件987654338@ 将以0007 开头)。

    进行更改后,python3 manage.py migrate 迁移您的更改。您现在可以访问unaccent 扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2022-08-03
      • 2021-01-13
      • 2019-05-27
      • 2017-06-29
      • 2021-09-26
      相关资源
      最近更新 更多