该文件说
如果
meta指定了模型get_latest_by,则可以忽略的field_name参数latest()。Djangoget_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_namefor
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)