【发布时间】:2018-05-24 19:14:51
【问题描述】:
我正在尝试在 Prefetch 对象中进行切片
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.
我发现了以下关于它的帖子:prefetch_related with limit 但解决方案在我的情况下不起作用,使用 timedelta 你不知道你得到了多少。
而且这个问题已经超过 3 年了,所以我希望同时一些解决方案,对 Django 进行更改(支持多个数据库的东西)
在跟踪器中有一个使用 Window 的解决方案:
Prefetch(
'post_set',
queryset=
Post.objects
.annotate(_rank=Window(Rank(), partition_by='category')
.filter(_rank__lte=3)
)
但是我不知道除了PostgreSQL之外的Window支持,也不知道在哪里可以找到Rank。
我正在考虑使用 extra 是否有帮助。
【问题讨论】:
-
目前不支持 - 请参阅 code.djangoproject.com/ticket/26780
-
您所链接的问题现在有了解决方案:stackoverflow.com/a/49944361/4744341