Ускорьте набор запросов с агрегатом в Django Orm - PullRequest
0 голосов
/ 29 октября 2019

Я жду довольно долго, прежде чем получу отчет в своем проекте (написано в Django = 2.2, python = 3.7). У меня сложная схема модели, и в моем отчете я действительно хочу получить информацию о пользователях для конкретных задач. Я обнаружил, что часть моего кода заставляет меня ждать так долго, и я не могу обновить его сам

Я пытался изменить функцию агрегирования для аннотирования, но она работает еще дольше. Я исследовал документацию по Django и нашел новые подходы, но не смог найти никакой хорошей информации о том, как изменить существующий код. Я также пытался добавить index=True в модель, с которой я часто работаю, когда получаю отчеты, но тоже не получилось.

def make_report(self, notes, project, date_range_list, from_date):
    report = {}

    current_date = 
    for d in date_range_list:
        report[str(d.date())] = {}
        for user in tasks.user.iterator():
            current_user_usernames = user.get_board_usernames()

            #here is the problems begin
            **report[d.strftime('%Y-%m-%d')][user.id] = (
                    notes.filter(username__in=current_user_usernames)
                    .filter(timestamp__range=(from_date, from_date + datetime.timedelta(days=1)))
                    .aggregate(Sum("seconds"))["seconds__sum"]
                    or 0
            )**
            # each iteration takes quite long time
        current_date = current_date + datetime.timedelta(days=1)
    return report

Я жду около 8-10 секунд для небольших задач и до пары минут для очень больших задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...