FieldError: Unsupported lookup for CharField or join on the field not permitted on Django
FieldError: Unsupported lookup for CharField or join on the field not permitted on Django
为什么我会收到此错误: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
。
如果 unaccent
或任何其他 PostgreSQL 特定查找,首先
- 将
django.contrib.postgres
添加到您的 settings.py
INSTALLED_APPS
。
- 在 PostgreSQL 上激活查找扩展。 For
unaccent
, click here(在“用法”下),或者您可以
- 执行扩展的迁移操作。对于
unaccent
,扩展名为 UnaccentExtension
。您可以通过 进行此迁移操作
$ ./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()
]
在上面的代码中,将<your_app_name>
替换为您的应用名称,将previous_migration_file
替换为之前的迁移文件的名称,不包括.py
文件扩展名。要找到以前的迁移文件,请查看您所在的迁移文件的编号(例如 0008_auto_20220104_1352
中的 0008
是文件的编号)并减去 1(例如0008_auto_20220104_1352
的上一个文件将以 0007
).
开头
进行更改后,python3 manage.py migrate
迁移您的更改。您现在可以访问 unaccent
扩展。
为什么我会收到此错误: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
。
如果 unaccent
或任何其他 PostgreSQL 特定查找,首先
- 将
django.contrib.postgres
添加到您的settings.py
INSTALLED_APPS
。 - 在 PostgreSQL 上激活查找扩展。 For
unaccent
, click here(在“用法”下),或者您可以 - 执行扩展的迁移操作。对于
unaccent
,扩展名为UnaccentExtension
。您可以通过 进行此迁移操作
$ ./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()
]
在上面的代码中,将<your_app_name>
替换为您的应用名称,将previous_migration_file
替换为之前的迁移文件的名称,不包括.py
文件扩展名。要找到以前的迁移文件,请查看您所在的迁移文件的编号(例如 0008_auto_20220104_1352
中的 0008
是文件的编号)并减去 1(例如0008_auto_20220104_1352
的上一个文件将以 0007
).
进行更改后,python3 manage.py migrate
迁移您的更改。您现在可以访问 unaccent
扩展。