2016-08-31 29 views
0

我剛剛瞭解到latest()方法。我去了django的文檔來了解更多關於它的信息。在文檔上寫着:使用帶日期字段以外的字段類型的最新()方法(Django)

latest(field_name=None)

返回最新的對象在表中,按日期,使用的日期字段中提供的FIELD_NAME

然而,在本教程中,我下面,這種方法連同字段名稱用於models.PositiveIntegerField()場(和模型沒有指定get_latest_by)。我一直在尋找解釋和類似的使用這種方法,其中field_name是不同於日期字段。

我已經發現了一些信息here在那裏說:

...它可能不會與其他總排序的種類太多,但不知道工作...

它與主鍵工作...

我還發現類似的案例here,其中latest()方法與id字段一起使用。

但是,我仍然沒有找到答案是否可以使用這種方法與日期字段以外的東西嗎?有沒有其他方法更適合這種任務?

回答

0

Here's the source code for _earliest_or_latest,其中該方法爲latest方法。正如您所看到的,它基本上使用您指定的任何字段名稱,並儘可能在數據庫級別按該字段對查找進行排序。它通過add_ordering方法執行此操作,其中is documented in the source code here

沒有什麼奇怪的東西在引擎蓋下 - Django只是通過一個ORDER BY並讓數據庫嘗試排序。這就是爲什麼你會看到數據庫環境之間行爲不一致的原因,比如SQLite如何將空值排列在非空值以下,而MySQL和PostgreSQL則是相反的。 Django並沒有真正訂購查詢集,而是基礎數據庫。

像日期,遞增ID等事情很容易數據庫訂購,因此與latest很好地工作。另一方面,UUIDField可能不會奏效。