【问题标题】:Prefetch object and slice预取对象和切片
【发布时间】: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 是否有帮助。

【问题讨论】:

标签: django django-queryset


【解决方案1】:

我已经浏览了您所链接的内容。项目中的人似乎意识到了这个问题。 Look hereThis comment 建议找到一种解决方法来限制查询。

【讨论】:

  • 看到评论了,不知道该功能在数据库层面的支持情况;我将问题更新为更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2018-10-28
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多