Вывести среднее количество просмотров всех постов на сайте

Есть модель страницы с полем views (IntegerField), нужно посчитать среднее арифметическое количества посещений для всех страниц в базе данных.

Я сделал так

posts = Post.objects.all()
views_all = 0
for post in posts:
    views_all += post.views
views_res = views_all/len(posts)
print(views_res)

Всё работает, но меня интересует, можно ли это сделать как-то по другому?


Ответы (1 шт):

Автор решения: Leonid

В Django ORM есть функция Avg(). Ее можно использовать для вычисления среднего арифметического:

from django.db.models import Avg
from myapp.models import Post

views_res = Post.objects.aggregate(Avg('views'))['views__avg']

Здесь мы использовали метод aggregate() модели для вычисления среднего значения views по всем записям. Avg('views') указывает ORM вычислить среднее значение для поля views. Метод aggregate() возвращает словарь, в котором ключ 'views__avg' соответствует вычисленному среднему значению.

Думаю должно сработать.

→ Ссылка