在Django中使用图标进行带有空格的搜索查询

8xiog9wr  于 2022-12-01  发布在  Go
关注(0)|答案(2)|浏览(137)

我通过我的网站做了简单的搜索,在应用程序中搜索几个模型。它工作得很好,直到我意识到它不能搜索带有空间的查询。有没有任何选项可以搜索带有空间的查询?
产品型号:

class Event(BaseModel):
    name = models.CharField(max_length=255, blank=True)
    description = models.TextField(blank=True)

对象名称

Event.objects.create(
   name="Test query event",
   description="Test Description"
)

查询本身:

query = "test query"
Event.objects.all().annotate(search=SearchVector("name")).filter(search__icontains=query)

我使用的是最新版本的Django+DRF+django-filters,但也可以添加其他包到项目中。

km0tfn4u

km0tfn4u1#

你能提供一些关于正在发生的事情和你的搜索词看起来像什么的更多信息吗?
重读这篇文章后,我认为你可能试图搜索部分单词,但你的例子给出了完整的单词。如果你的例子是准确的,那么你不需要做任何事情:

from django.contrib.postgres.search import SearchQuery, SearchVector

Event.objects.create(name="test query")
Event.objects.create(name="tESt qUEry")
Event.objects.create(name="test not a query")
Event.objects.create(name="ignore this")

qs = Event.objects.annotate(search=SearchVector("name"))

qs.filter(search="test query")
# <QuerySet [Event('test query'), Event('tESt qUEry'), Event('test not a query')]>

# Use a SearchQuery to search for them together:

qs.filter(search=SearchQuery("test query", search_type="phrase"))
# <QuerySet [Event('test query'), Event('tESt qUEry')]>
izj3ouym

izj3ouym2#

你可以直接使用这个查询。qs = Event.objects.filter(name__icontains="test q")如果你有多个单词要搜索,那么你可以像这样使用Q。

qs = Event.objects.filter(
Q(name__icontains="test q")| Q(name__icontains="test queue")
)

相关问题