【问题标题】:In Django, how can I retrieve all the most recent versions of my objects?在 Django 中,如何检索对象的所有最新版本?
【发布时间】:2011-09-18 23:14:31
【问题描述】:

假设我正在使用 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

缺点是我必须从数据库中获取所有条目并循环遍历每个条目——如果可能的话,我宁愿避免这样做。

【问题讨论】:

    标签: django django-aggregation


    【解决方案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'))
    

    【讨论】:

    • 这种方法不会返回完整的对象,而是一个包含directorynamemax_rev的Dict。有没有一种巧妙的方法来获取整个对象?
    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 2019-08-09
    • 1970-01-01
    • 2016-05-23
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多