Предполагая следующую модель примера:
# models.py
class event(models.Model):
location = models.CharField(max_length=10)
type = models.CharField(max_length=10)
date = models.DateTimeField()
attendance = models.IntegerField()
Я хочу получить номер посещаемости для последней даты каждого местоположения события и комбинации типов, используя Django ORM.Согласно документации Django Aggregation , мы можем достичь чего-то близкого к этому, используя values
перед annotation
.
... исходные результаты сгруппированы в соответствии суникальные комбинации полей, указанных в предложении values ().Затем предоставляется аннотация для каждой уникальной группы;аннотация вычисляется для всех членов группы.
Таким образом, используя примерную модель, мы можем написать:
event.objects.values('location', 'type').annotate(latest_date=Max('date'))
, которая действительно группирует события по местоположению и типу, но не возвращает поле attendance
, которое является желаемым поведением.
Еще один подход, который я пробовал, состоял в том, чтобы использовать разные, то есть:
event.objects.distinct('location', 'type').annotate(latest_date=Max('date'))
, но я получаюошибка
NotImplementedError: annotate() + distinct(fields) is not implemented.
Я нашел несколько ответов, которые основаны на специфических особенностях базы данных Django, но я хотел бы найти решение, которое не зависит от базовой реляционной базы данных.