切片最终查询集 return 数量:Django
Slice final queryset return amount: Django
在下面的函数中,我想 return 只有 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]
有人知道如何解决这个问题吗?
谢谢!
如评论中所述,当 Django 尝试链接查询集上的任何 ORM 函数(filter
、exclude
、values
...)时,会引发此异常切片。
您分享的代码片段似乎是正确的,并且 return 是一个切片查询集。您需要检查每次使用 get_queryset
的结果时,您只是在迭代它而不是试图将它用作 QuerySet
对象。
在 DRF 中,您可以 return 切片查询集 AFAIK,如果您不覆盖子 class 中的 get_queryset
以使用它做额外的事情。
改用分页。将页面大小设置为 200 个项目。不管你不使用其他页面,第一页就是你所需要的。
这样你就可以使用内置方法来获取 200 个项目并且你不会得到任何错误
在下面的函数中,我想 return 只有 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]
有人知道如何解决这个问题吗?
谢谢!
如评论中所述,当 Django 尝试链接查询集上的任何 ORM 函数(filter
、exclude
、values
...)时,会引发此异常切片。
您分享的代码片段似乎是正确的,并且 return 是一个切片查询集。您需要检查每次使用 get_queryset
的结果时,您只是在迭代它而不是试图将它用作 QuerySet
对象。
在 DRF 中,您可以 return 切片查询集 AFAIK,如果您不覆盖子 class 中的 get_queryset
以使用它做额外的事情。
改用分页。将页面大小设置为 200 个项目。不管你不使用其他页面,第一页就是你所需要的。
这样你就可以使用内置方法来获取 200 个项目并且你不会得到任何错误