2011-09-18 20 views
1

は、私はこのようなモデルのものを使用して、ジャンゴと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です。オブジェクト全体をフェッチするための滑らかな方法はありますか? –

関連する問題