2016-10-09 45 views
0

我想用django ORM來接收最大的PK。 馬克斯我的意思是我想做到這一點查詢:Django得到最大的PK

SELECT MAX(pk_column) 
FROM some_table; 

的事情是,我想是這樣some_table_model.max(pk),使Django會在它上面轉化爲查詢,以便它會用指數法對我來說是很重要的。所以:

  1. 是否有類似的東西建立?
  2. 有沒有辦法編寫一個通用函數,而不是爲特定的模型?

在此先感謝您。

回答

1

您可以使用aggregation來獲得最大值。例如,如果你想你的用戶表的最大ID:

from django.contrib.auth.models import User 
from django.db.models import Max 

users = User.objects.all() 
max = users.aggregate(Max('id')) 

這將使你{'id__max': 10}或任何偉大的ID是。

+0

你碰巧知道查詢其轉換爲建議? –

+0

您可以通過執行sone_queryset.query獲得任何查詢的SQL,但是我不確定如何在使用聚合後執行相同操作... –

+0

是的我知道我可以查詢。我只是想知道你是否知道'aggregate'的查詢是什麼。使用'aggregate'的東西會產生一個像我希望的那樣的查詢,這有點奇怪。 –

0

您可以使用此

YourModel.objects.all().order_by(-id).first().id 
+0

這個方法會轉化爲一個使用'order by'和'rownum = 1(limit 1)'的查詢語句......這實際上是我想要避免的 –

0

這是有點老了,但我遇到了這個同樣的問題,它可以使用latest實現。像

try: 
    return some_table_model.ojects.latest('pk').pk 
except some_table_model.DoesNotExist: 
    return 0 

這當然假設你的PK是數字,而不是複合。否則,你可以使用id或其他一些領域上面