首页 > 解决方案 > Django 按组保留一个元素,然后在此查询集上使用属性

问题描述

我有一个像这样的模型:

class Extension(models.Model):
    name = models.CharField(max_length=32)
    version = models.CharField(max_length=16)

    @property
    def path(self):
        return something

我想获得一个仅包含每个名称的最后一个版本的扩展查询集,然后为每个最近的扩展获取一个元组(名称,路径)。

我试过了

latests = Extension.objects.values('name').annotate(last=Max('version'))

但它给了我一个没有属性访问权限的字典

我怎样才能做到这一点?

标签: pythondjangodjango-modelsdjango-queryset

解决方案


这是您可以做到的一种方法:

latests = Extension.objects.values('name').annotate(Max('version'))
q_statement = Q()
for pair in latests:
    q_statement |= (Q(name=pair['name']) & Q(version=pair['version__max']))
extensions = Extension.objects.filter(q_statement)

推荐阅读