Я искал на всем протяжении места ответ на это, но ничего не мог найти. Возможно, это - просто глупый вопрос или действительно хитрый.Вот:
Скажем, моя модель - это (псевдо код django):
Event
type = ForeignKey(EventType)
name = CharField
date_start = DateField
date_end = DateField
EventType
name = CharField
То, что я хочу знать, является средним временем продолжительности для каждого типа события. Что я делаю теперь, вычисляют среднюю продолжительность каждый раз, когда новое событие создается (сохраните метод), и сохраните это в average_duration столбце в EventType. Проблема с этим подходом состоит в том, что я не могу ответить на вопросы как, "каково было среднее время продолжительности для событий типа X, в течение года Y". Таким образом вместо того, чтобы добавить больше столбцов для ответа на вопросы как они я предпочел бы иметь, в котором выполняют "в реальном времени".
Это может быть сделано путем аннотирования queryset? Сначала я должен был бы получить различия в дате для каждого типа события, затем придумать их среднее число и затем аннотировать Событие queryset тем средним числом, я принимаю.
Я думаю, что лучше всего создать представление SQL со столбцом date_end - date_start
, создать модель django в этом представлении, а затем вы сможете запросить просматривайте и комментируйте его по своему усмотрению. Я сделал это с моделями, похожими на вашу, и, возможно, я смогу извлечь для вас какой-нибудь интересный код, если вам нужно.
Вам нужно будет создать набор запросов с помощью метода extra, чтобы добавить разницу дат к каждой строке
Затем используйте метод aggregate, чтобы вычислить среднее значение для только что добавленного столбца:
Будьте осторожны, этот метод медленный и не масштабируется. Хранение вычисленного значения в event_type - имхо лучший вариант.