2011-09-18 48 views
1

比方說我模擬使用Django一個VCS,使用模型是這樣的:在Django中,如何檢索我的對象的所有最新版本?

class VCSItem(models.Model): 
    directory = models.CharField() 
    name = models.CharField() 
    revision = models.IntegerField() 

現在(目錄名)唯一標識由我的系統跟蹤的項目,但每個項目可能有多個版本。

我想列出所有項目,其中每個項目都有我的系統的最大跟蹤版本。 Django是否具有內置的功能?

最壞的情況,我可以做我自己喜歡的東西:

newest_items = {} 
for item in VCSItem.objects.all().order_by("revision"): 
    newest_item[item.directory + item.name] = item 

的缺點是,我必須從數據庫中獲取和循環每個所有條目 - 這是我寧願避免如果可能的話。

回答

1

看看註釋和最大聚集功能:https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate https://docs.djangoproject.com/en/dev/ref/models/querysets/#max

VCSItem.objects.values('directory', 'name').annotate(max_rev=Max('revision')) 
+0

這種方法不會返回完整對象,但是包含'directory','name'和'max_rev'的Dict。有沒有一種方便的方式來獲取整個對象? –

相關問題