Slice最终queryset返回数量:Django



在下面的函数中,无论是否应用过滤器,我都只想返回200个对象。

每当我尝试这样做时,我都会错误地说:Cannot filter a query once a slice has been taken.

def get_queryset(self):
    queryset = Book.objects 
        .select_related('user', 'category') 
        .prefetch_related('likers') 
        .all()
    tag = self.request.query_params.get('tag', None)
    if tag is not None:
        queryset = queryset.filter(
            Q(description__iexact='#{}'.format(tag)))
    return queryset[:200]

有人知道怎么解决这个问题吗?

谢谢!

请改用分页。将页面大小设置为200个项目。无论你是否不使用其他页面,第一页都将是你所需要的。

这样,您就可以使用内置方法只获取200个项目,并且不会出现任何错误

正如注释中所说,当Django试图在已切片的查询集上链接任何ORM函数(filterexcludevalues…)时,会引发此异常。

您共享的代码段似乎是正确的,并且确实返回了一个切片查询集。您需要检查每次使用get_queryset的结果时,是否只是对其进行迭代,而不是尝试将其用作QuerySet对象。

在DRF中,如果您没有重写子类中的get_queryset以对其执行额外操作,则可以返回切片查询集AFAIK。

最新更新