1

假设我正在使用 Django 对 VCS 进行建模,使用如下模型:

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

现在 (directory, name) 唯一标识我的系统跟踪的项目,但每个项目可能有多个修订。

我想列出所有项目,其中每个项目都有我系统的最大跟踪修订版。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 回答