Сделали: http://docs.djangoproject.com/en/dev/topics/db/aggregation/!
Особо приглянувшиеся мне вещи:
-
Store.objects.annotate(Count('books__authors'))
Store — это магазин, у него many-to-many на Book, у которого есть many-to-many на Author. Тут делается join по всем нужным таблицам и group by на них. *
Book.objects.annotate(num_authors=Count('authors')).filter(num_authors__gt=1)
Я очень рад, что having не стали делать отдельным понятием. Это просто фильтр. А уж having там или where — пусть оно само разбирается.
А также вместе с этим в транк приехали и выражения со ссылкой на поля (по крайней мере, должны были, я не проверял :-) ).
Комментарии: 8
круто, буду поюзать
разбирается девелопер :) если filter стоит перед annotate, то это WHERE, если после него - то это HAVING (см. http://docs.djangoproject.com/en/dev/topics/db/aggregation/#order-of-annotate-and-filter-clauses))
Пока нет.
Надо будет посмотреть насколько нормальный SQL генерится.
Иван,
не могли бы вы отдельным постом рассказать с чем связана нестабильная работа сервиса "Куда все идут", а последние несколько дней он и вовсе постоянно "временно недоступен"?
Глядя на это становится боязно использовать Django в своих новых проектах.
Заранее спасибо.
Хм... Я не заметил, что он как-то особенно часто глючит именно в последнее время. Там на серверах есть некая долгоиграющая проблема с GPFS'ом, которую мы вскоре надеемся порешать, и я про это напишу. Но вот с самим джанговским приложением проблем особенно не наблюдается.