Если у меня есть модель Книга определяется как:Django ORM: Агрегирование аннотаций поднимает DatabaseError
class Book(models.Model):
name = models.CharField(max_length=300)
pages = models.IntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
rating = models.FloatField()
pubdate = models.DateField()
и я выполнить запрос:
Book.objects.values('rating').annotate(books_per_rating=Count('id')).aggregate(Max('books_per_rating'))
Я получаю DatabaseError.
В соответствии с этим https://docs.djangoproject.com/en/1.5/topics/db/aggregation/#aggregating-annotations Django поддерживает агрегирование аннотаций. Но в примере, приведенном в самой ссылке, они комментируют запрос QuerySet, который, в свою очередь, возвращает код QuerySet (а не ValuesQuerySet), поэтому агрегированный метод выполняется успешно. Но в моем примере агрегирование ValuesQuerySet вызывает DatabaseError.
Это ошибка в Django? Поскольку, если Django не поддерживает агрегацию более ValuesQuerySet, тогда он должен вызывать исключение на уровне Django (не DatabaseError).
Update:
Эта ошибка была решена здесь: https://code.djangoproject.com/ticket/20782
Также интересно, если: 'Book.objects.values ('rating'). Aggregate (Max ('rating'))' Он возвращает пустой dict без выполнения каких-либо запросов БД !! –