Переопределение 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.

Вернуться на верх