1

次のようなモデルを使用して、Django で VCS をモデリングしているとしましょう。

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

欠点は、データベースからすべてのエントリをフェッチし、それぞれをループする必要があることです。これは、できれば避けたいことです。

4

1 に答える 1

1

注釈と最大集計関数を見てください: https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotate https://docs.djangoproject.com/en/dev/ref/models/クエリセット/#max

VCSItem.objects.values('directory', 'name').annotate(max_rev=Max('revision'))
于 2011-09-18T23:29:30.763 に答える