Skip to content

Instantly share code, notes, and snippets.

@Zakui
Forked from ryanpitts/gist:1304725
Created November 7, 2018 10:43
Show Gist options
  • Save Zakui/dc1acbb9c1b0ccbf08648f2c6eb9e6c2 to your computer and use it in GitHub Desktop.
Save Zakui/dc1acbb9c1b0ccbf08648f2c6eb9e6c2 to your computer and use it in GitHub Desktop.
GROUP BY and Select MAX from each group in Django, 2 queries
'''
given a Model with:
category = models.CharField(max_length=32, choices=CATEGORY_CHOICES)
pubdate = models.DateTimeField(default=datetime.now)
<other fields>
Fetch the item from each category with the latest pubdate.
'''
model_max_set = Model.objects.values('category').annotate(max_pubdate=Max('pubdate')).order_by()
q_statement = Q()
for pair in model_max_set:
q_statement |= (Q(category__exact=pair['category']) & Q(pubdate=pair['max_pubdate']))
model_set = Model.objects.filter(q_statement)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment