【问题标题】:Django Reverse Query OFFSET 1Django 反向查询偏移量 1
【发布时间】:2015-11-27 09:15:45
【问题描述】:

我在反转查询时遇到了 OFFSET 问题。我正在使用 Django 1.8 和 Python 2.7。 以下两行代码不会将反向查询偏移 1。 但是两者都会偏移大于 1 的值。

Article.objects.all().order_by('-id')[:2:1]
Article.objects.all().order_by('id').reverse()[:2:1]

方括号中的第二个数字是OFFSET,第一个是LIMIT。如果我在 OFFSET 中添加 2,则查询偏移量为 2,但是当我在 OFFSET 中添加 1 时,查询偏移量为 0。我怎样才能偏移 1? django 框架?

【问题讨论】:

  • 我在想也许可以将查询行复制到一个列表中,然后将这些行作为列表中的元素访问,但这会有点麻烦。

标签: python sql django reverse offset


【解决方案1】:

您误解了切片语法。它与列表完全相同。 first 参数是开始,但您完全省略了该参数;您只提供了第二个(结束)和第三个(步骤)值。

你的代码应该是:

Article.objects.all().order_by('-id')[1:2]

或者只是

Article.objects.all().order_by('-id')[1]

【讨论】:

  • 你的第一行没有反转,我要DESC ORDER。你的跳过最旧的,然后是新的,然后是最新的。我想要最新的到旧的。第二行给我一个错误'Article' object is not iterable'
  • 是的,它使用 order_by -id。您可以改用reverse(),但它的作用完全相同。第二个返回单个文章而不是查询集;因为无论如何你只想要一个我不知道你为什么要迭代。
  • 如果我有 3 个数据库条目 1 2 和 3。1 是最旧的,3 是最新的。您的第一行返回 2 和 3。我希望它返回 2 和 1。
  • 真的,没有。它返回一个对象,这是第二个最新的对象。在任何情况下,您都不应该依赖 id 来订购;如果要按创建时间排序,则应在模型中添加时间戳。
  • 您的第一行现在正在使用 1:3。浏览器中一定有缓存。 1:3 返回 2 和 1。谢谢伙计!
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 2019-12-07
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多