【发布时间】:2021-08-31 00:22:53
【问题描述】:
所以我有一个图书数据库,我想根据过滤器和关键字搜索它,所以我在 BookSearch 视图中覆盖了 get_queryset 方法:
class BookSearch(generics.ListAPIView):
serializer_class = ProductDetailViewSerializer
model = ProductDetailView
def get_queryset(self):
queryset = None
categories = self.kwargs['categories'].rstrip()
keywords = self.kwargs['keywords'].rstrip()
if isinstance(categories, str) and isinstance(keywords, str):
book_filter = BookFilter(categories)
sql = self.get_sql(categories, keywords, book_filter)
queryset = ProductDetailView.objects.filter(
id__in=RawSQL(sql, book_filter.params)
)
message = f"{queryset.query}"
log_to_file('BookSearch.log', 'BookSearch.get_queryset', message)
return queryset
该 log_to_file 调用记录了 django 使用的查询,我在这里缩写了 但如下:
SELECT `jester_productdetailview`.`id`,
`jester_productdetailview`.`isbn`,
`jester_productdetailview`.`title`
FROM `jester_productdetailview`
WHERE `jester_productdetailview`.`id` IN (
select id from jester_productdetailview
where ( authors like '%Beatrix%' or
illustrators like '%Beatrix%' or
title like '%Beatrix%' ) )
ORDER BY `jester_productdetailview`.`title` ASC
如果我在我的数据库中手动运行该查询,我会得到 186 行:
'119371','9780723259572','A Beatrix Potter Treasury'
'130754','9780241293348','A Christmas Wish'
'117336','9780241358740','A Pumpkin for Peter' ...
为了得到上面的查询,我通过API调用视图,但是到返回查询集的时候,还没有结果???
http://127.0.0.1:8000/api/book-search/{"filter": "全部"}/Beatrix/ 返回 []
【问题讨论】: