django —— Queryset 切片后过滤(filter)和排序(order_by)错误

AssertionError: Cannot reorder a query once a slice has been taken.

问题描述

# 目的:取 Article 表中前十数据并将获取到的十条数据根据 pub_date 排序
queryset = Article.objects.all()[:10].order_by("pub_date")

# 报错:
   1069         """Return a new QuerySet instance with the ordering changed."""
   1070         assert self.query.can_filter(), \
-> 1071             "Cannot reorder a query once a slice has been taken."
   1072         obj = self._chain()
   1073         obj.query.clear_ordering(force_empty=False)

AssertionError: Cannot reorder a query once a slice has been taken.

解决方法

# 1. 先切片获取前十条数据
queryset = Article.objects.all()[:10]
# 2. 根据 pub_date 进行排序
queryset = sorted(queryset, key=lambda item: item.pub_date)

AssertionError: Cannot filter a query once a slice has been taken.

问题描述

# 目的:取 Article 表中前十数据并从获取到的十条数据里过滤出 pub_date=2020-07 的数据
queryset = Article.objects.all()[:10].filter(pub_date="2020-07")

# 报错:
    902         if args or kwargs:
    903             assert self.query.can_filter(), \
--> 904                 "Cannot filter a query once a slice has been taken."
    905 
    906         clone = self._chain()

AssertionError: Cannot filter a query once a slice has been taken.

解决方法

# 1. 先切片获取前十条数据
queryset = Article.objects.all()[:10]
# 2. 通过列表生成器获取
queryset = [item for item in queryset if item.pub_date == "2020-07"]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值