栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用.order_by()和.latest()的Django查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用.order_by()和.latest()的Django查询

我本来希望.latest()总是基于(date)(time)字段返回最新的实例。

该文件说

如果

meta
指定了模型
get_latest_by
,则可以忽略的
field_name
参数
latest()
。Django
get_latest_by
默认会使用中指定的字段。

所有这些意味着,当您触发时,

MyModel.objects.latest()
您将基于日期/时间字段获得最新的实例。当我使用示例数据测试您的代码时,确实可以。

然后,稍后我需要instances.latest(),但是它不会给我正确的实例,实际上它给了我第一个实例。

您误解了工作方式

latest()
。当所谓的 MyModel.objects 它在返回的最新实例 。当一个叫做 查询集
latest
将在返回的第一个对象 的查询集
。您的查询集包括了所有实例的
MyModel
排序由
creation_date
升序排列。这是很自然那么
latest
这个查询集应该返回 第一
的查询集的 。碰巧这是 表中 最旧的行。

一种更好理解的方法是查看为触发的查询

latest

情况1:

from django.db import connectionMyModel.objects.latest()print connection.queries[-1]['sql']

打印:

SELECt "app_mymodel"."id", "app_mymodel"."creation_date" FROM "app_mymodel" ORDER BY "app_mymodel"."creation_date" DESC LIMIT 1

请注意by

creation_date DESC
LIMIT
子句的排序。前者是由于,
get_latest_by
而后者是的贡献
latest

现在,情况2:

MyModel.objects.order_by('creation_date').latest()print connection.queries[-1]['sql']

版画

SELECt "app_mymodel"."id", "app_mymodel"."creation_date" FROM "app_mymodel" ORDER BY "app_mymodel"."creation_date" ASC LIMIT 1

请注意,订购已更改为

creation_dateASC
。这是显式操作的结果
order_by
。该
LIMIT
是上涨了急诊室,后来礼貌
latest

让我们还看一下情况3:在其中显式指定

field_name
for
objects.latest()

MyModel.objects.latest('id')print connection.queries[-1]['sql']

表演

SELECt "app_mymodel"."id", "app_mymodel"."creation_date" FROM "app_mymodel"ORDER BY "app_mymodel"."id" DESC LIMIT 1


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号