让我们说我正在使用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
缺点是我必须从数据库中获取所有条目并循环遍历每个条目 - 如果可能的话我宁愿避免这样做。
答案 0 :(得分:1)
查看注释和Max聚合函数: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'))