使用带有除日期字段之外的字段类型的latest()方法(Django)

时间:2016-08-31 23:26:08

标签: django django-models django-queryset django-orm

我刚刚了解了latest()方法。我去了django的文档,了解更多相关信息。在文档中写道:

  

latest(field_name=None)

     

使用作为日期字段提供的 field_name ,按日期返回表格中的最新对象。

然而,在我正在关注的教程中,此方法与models.PositiveIntegerField()字段的字段名一起使用(模型未指定get_latest_by)。我一直在尝试搜索此方法的解释和类似用法,其中field_name与日期字段不同。

我找到了一些信息here,据说:

  

...它可能也适用于其他总排序类型,但不确定......

  

它适用于主键...

我也发现了类似的案例here,其中latest()方法与id字段一起使用。

但是我仍然没有找到答案是否可以将此方法与日期字段以外的其他方法一起使用?还有其他方法更适合这种任务吗?

1 个答案:

答案 0 :(得分:1)

Here's the source code for _earliest_or_latest,为latest方法提供支持。如您所见,它基本上使用您指定的任何字段名称,并尽力在数据库级别按该字段对您的查找进行排序。它通过add_ordering方法执行此操作,is documented in the source code here

根本没有什么花哨的东西--Dango只是传递ORDER BY并让数据库试图解决问题。这就是为什么你看到数据库环境之间的行为不一致,比如SQLite如何在非nulls之下排空null,而MySQL和PostgreSQL则反过来。 Django并没有真正订购查询集,它是底层数据库。

日期,递增ID等内容很容易让数据库订购,因此可以与latest配合使用。另一方面,UUIDField可能不会那么好。