Django keep one element by group and then use property on this queryset

Viewed 83

I have a model like this one:

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

    @property
    def path(self):
        return something

I would like to get an Extension queryset containing only the last version for each name and then get a tuple (name, path) for each of these last recent Extension.

I tried

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

but it gave me a dict without the properties access

How can i do that?

1 Answers

here's one way you could do it:

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)
Related