DJANGO : Как отфильтровать последние данные, собранные для каждого типа объекта в модели?
Допустим, у меня есть такая модель
class TreeCensus(models.Model):
name = models.CharField() #Oak, elm, ...
identified_at = models.DateTimeField(auto_now_add=True)
Я хочу получить QS с последней переписью каждого дерева.
Я наивно попробовал это
TreeCensus.object.order_by('name').last()
Но очевидно, что он вернул мне последний из всех объектов TreeCensus.
Итак, какой лучший способ (или хотя бы хороший) для этого? Например, если в QS есть 2 Oak, я хочу, чтобы первый был отфильтрован
Вы можете .annotate(…) [Django-doc] с:
from django.db.models import Max
TreeCensus.objects.values('name').annotate(
last_seen=Max('identified_at')
).order_by('name')
Это создаст QuerySet словарей с name и last_seen в качестве ключей, где last_seen будет содержать наибольшую (последнюю) временную метку для данного name.