Переопределение get_queryset, но получаем пустой набор результатов
Итак, у меня есть база данных книг, и я хочу искать в ней на основе фильтров и ключевых слов, поэтому я переопределил метод get_queryset в моем представлении BookSearch:
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": "all"}/Beatrix/ возвращает []
Вы возвращаете queryset только внутри условия if. По умолчанию функция передает None. Верните кверисет и за пределами условия if.