Django 预取对象和切片
我正试图在预取对象内部进行切片Django 预取对象和切片,django,django-queryset,Django,Django Queryset,我正试图在预取对象内部进行切片 def get_queryset(self): qs = super().get_queryset() return qs.prefetch_related( Prefetch('products', queryset=Product.objects.order_by('-updated_at', '-created_at')[:3])) 但我得到了以下错误: Cannot filter a query
def get_queryset(self):
qs = super().get_queryset()
return qs.prefetch_related(
Prefetch('products', queryset=Product.objects.order_by('-updated_at', '-created_at')[:3]))
但我得到了以下错误:
Cannot filter a query once a slice has been taken.
我发现了以下关于它的帖子:
但是这个解决方案,在我的情况下不起作用,使用timedelta你不知道你得到了多少
另外,这个问题已经存在3年多了,所以我希望在此期间对Django进行一些解决方案的更改(支持多个数据库的更改)
在跟踪器中,有一个使用窗口的解决方案:
Prefetch(
'post_set',
queryset=
Post.objects
.annotate(_rank=Window(Rank(), partition_by='category')
.filter(_rank__lte=3)
)
但是我不知道除了PostgreSQL之外还有什么窗口支持,也不知道什么时候可以找到Rank
我正在考虑使用extra是否有帮助。我已经浏览了您链接内容的评论。项目中的人似乎意识到了这个问题。建议找到一个解决方法来限制查询。这目前不受支持-请参阅您链接的问题中现在有一个解决方案:我看到了注释,但不知道该函数在数据库级别的支持程度;我更新了这个问题,使之更清楚。