2015-05-20 56 views
1

我使用q.latest()從查詢集中檢索最近的對象,在其模型的Meta類中設置get_latest_by = 'created'如何在django中使用pk中的meta屬性get_latest_by?

例如:

class A(models.Model): 
    created = models.DateTimeField(auto_now=True) 

    class Meta: 
     get_latest_by = 'created' 

但由於Django的DateTimeField只支持到秒,沒有微秒的支持,我想我的系統無法正常從查詢集檢索最新的對象。

也許這是因爲表中有一些記錄與created值相同,儘管它們不是完全相同的時間(在微秒內)創建的。

所以我想在Meta類使用pkget_latest_by屬性而不是created,但由於沒有我的latest()get_latest_by如何一起工作的深刻理解,我不知道這是正確的做法,只是把get_latest_by = 'pk'

可以放get_latest_by = 'pk'嗎? 012je究竟在django的背面做了什麼?

+1

[Django查詢使用.order \ _by()和.latest()]的可能重複(http://stackoverflow.com/questions/3736964/django-query-using-order-通過-和最新) –

回答

2

latest基本上只是order_by後跟get的快捷方式,以獲取按get_latest_by字段排序的查詢集中的最後一項。

pk排序是好的,但它依賴於有關您的應用程序和數據庫後端如何工作的假設(例如,您導入數據從高數字pk 9999開始......它是否會填寫缺失的1,2, 3,100,2000個鍵,如果你在未來的Django後插入新的數據?)

將支持微秒https://code.djangoproject.com/ticket/19716

對於現在最好的辦法是將兩者結合起來,即order_by('created', 'pk')

不幸get_latest_bylatest不要讓你指定一個複合排序(並刪除默認pk排序),所以你可能更喜歡做手工:

.order_by('-created', '-pk').get() 

(注意:get得到的查詢集的第一項目,所以你需要有一個-前綴顛倒順序取得最新

相關問題