【问题标题】:order_by() and latest() returning different queryset valuesorder_by() 和 latest() 返回不同的查询集值
【发布时间】:2020-02-27 16:11:11
【问题描述】:

使用order_by('date') and latest('date') 查询数据库返回不同的实例.....这是获取最新实例的最佳方法?

我正在使用 python 2.7 和 django1.8.19

from apps.model import MyModel

def function():
latest_ins = MyModel.objects.filter(member=member).latest('date').date
latest_ins = MyModel.objects.filter(member=member).order_by('date').first().values('date')

【问题讨论】:

    标签: django database postgresql python-2.7 orm


    【解决方案1】:

    根据Django's documentation,latest 与日期一起工作,并将返回一个实例,即根据指定参数的最新对象。所以它会进行排序和过滤。

    order_by 将对对象进行对比排序,但不对其进行过滤。在您的示例中,order_by('date') 将按时间顺序对您的对象进行排序,最旧的元素排在最前面,最近的元素排在最后。 order_by('date').first() 等效于 earliest('date')。这就是为什么你没有得到相同的实例。你应该要么order_by('-date').first()要么order_by('date').last()

    使用哪一个?我会选择 latest() 或 early(),因为它更容易阅读且不易出错。

    注意:您真的应该考虑迁移到 Django 2.2,因为不再支持 1.7。同样,如果可以,请使用 python 3.x。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多