2017-11-11 286 views
0

喜对不起,我可怜的英语如何在W((django)中使用values_list?

为什么鹡鸰搜索返回PostgresSearchResult搜索后?

我想PageQuerySet

像Django的Postgres的搜索后台,因为我不能搜索之后使用values_list

我想页面路径的列表(因为我想找到的网页父母(分类页)由路径)

,我不能使用values_list搜索之前,因为它不工作

我知道,我可以用for循环,但是这需要大约5秒钟EAC^h运行

我的代码是非常简单的:

Django的方式:#Work

ProductPage.objects.filter(title__search="phone").values_list('path') 

鹡鸰方式:#NotWork :(

ProductPage.objects.search(query).values_list('path') 

回答

1

这是一个有点反直觉,但你需要始终把search(query)通话最后。

Search docs,你会看到一个提示:

  • search()方法将你的QuerySet转换成一个实例鹡鸰的SearchResults类之一的 (取决于后端)。 这意味着您必须在致电search()之前执行过滤。

这意味着,要获得大部分等于组的结果,你需要做以下几点:

query = 'phone' 
ProductPage.objects.values_list('path').search(query) 

注意search是最后一次通话。搜索仍将按预期工作,我也在我的设置上测试了类似的情况。

values()values_list()filter()都返回查询集,其中的鹡鸰search()需要一个QuerySet并返回一个非QuerySet对象。实际的数据库querying only happens when you iterate (or use) a QuerySet所以QuerySet函数的顺序并不重要。