简体   繁体   中英

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. I've already done this and the lookup still isn't working, despite whether I use __search or search= for the filter. Any ideas? Do I need to register the lookup in my model myself?

settings.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.

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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