简体   繁体   English

Django postgres 全文搜索错误“Unsupported lookup 'search' for CharField”

[英]Django postgres full text search error "Unsupported lookup 'search' for CharField"

All similar problems have been solved by adding django.contrib.postgres to INSTALLED_APPS in settings.py, which is also all the docs mention on how to use the lookup.所有类似的问题都已通过将django.contrib.postgres添加到 settings.py 中的 INSTALLED_APPS 来解决,这也是所有关于如何使用查找的文档提到的。 I've already done this and the lookup still isn't working, despite whether I use __search or search= for the filter.我已经这样做了,但查找仍然无法正常工作,尽管我是否使用 __search 或 search= 作为过滤器。 Any ideas?有任何想法吗? Do I need to register the lookup in my model myself?我需要自己在我的 model 中注册查询吗?

settings.py:设置.py:

INSTALLED_APPS = [
...
'django.contrib.postgres',

# my_project
'my_project.apps.appname',
'my_project.apps.appname',
...

error line:错误行:

x = y.objects.filter(description__search="example")

traceback:追溯:

  File "d:\proj\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "d:\proj\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "d:\proj\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "d:\proj\env\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "d:\proj\env\lib\site-packages\rest_framework\views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "d:\proj\env\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "d:\proj\env\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
    raise exc
  File "d:\proj\env\lib\site-packages\rest_framework\views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "D:\proj\my_project\my_project\apps\appname\views.py", line 306, in get
    x = y.objects.filter(description__search="example")
  File "d:\proj\env\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "d:\proj\env\lib\site-packages\django\db\models\query.py", line 941, in filter
    return self._filter_or_exclude(False, args, kwargs)
  File "d:\proj\env\lib\site-packages\django\db\models\query.py", line 961, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, args, kwargs)
  File "d:\proj\env\lib\site-packages\django\db\models\query.py", line 968, in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
  File "d:\proj\env\lib\site-packages\django\db\models\sql\query.py", line 1393, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "d:\proj\env\lib\site-packages\django\db\models\sql\query.py", line 1412, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "d:\proj\env\lib\site-packages\django\db\models\sql\query.py", line 1347, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "d:\proj\env\lib\site-packages\django\db\models\sql\query.py", line 1187, in build_lookup
    lhs = self.try_transform(lhs, lookup_name)
  File "d:\proj\env\lib\site-packages\django\db\models\sql\query.py", line 1226, in try_transform
    raise FieldError(
django.core.exceptions.FieldError: Unsupported lookup 'search' for CharField or join on the field not permitted.```

x = y.objects.filter(description__search="example")

Search lookup is specific to PostrgreSQL so you need to set up PosgreSQL db first.搜索查找特定于 PostrgreSQL,因此您需要先设置 PosgreSQL 数据库。

https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/search/ https://docs.djangoproject.com/en/4.0/ref/contrib/postgres/search/

If you want to just look for a string in CharField or TextField you can use如果您只想在 CharField 或 TextField 中查找字符串,您可以使用

x = y.objects.filter(description__icontains="example")

docs: https://docs.djangoproject.com/en/4.0/ref/models/querysets/#icontains文档: https://docs.djangoproject.com/en/4.0/ref/models/querysets/#icontains

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM