【问题标题】:Overriding get_queryset, but get empty result set覆盖 get_queryset,但得到空结果集
【发布时间】: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/ 返回 []

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您仅在 if 条件内返回查询集。默认情况下,该函数发送无。在 if 条件之外返回查询集。

    【讨论】:

      猜你喜欢
      • 2020-10-07
      • 2020-05-03
      • 1970-01-01
      • 2020-11-08
      • 2020-05-29
      • 1970-01-01
      • 2018-10-10
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多