Django сложный запрос с медленной загрузкой страницы

У меня есть приложение викторины, сделанное с помощью Django. В основном я загружаю довольно сложный запрос. По сути, я создаю новый экзамен с такой логикой:

  1. Получение вопроса из банка вопросов (модель Question)
  2. Я получаю определенное количество вопросов из каждого предмета и использую их для создания QuestionDraft, чтобы я мог хранить и сохранять результаты каждого студента.
  3. У каждого QuestionDraft есть AnswerDraft, который я использую для хранения вопросов, на которые ответил пользователь (каждый AnswerDraft по сути является копией банка вопросов Answer).

Пока я хочу загрузить тест из 50 вопросов, все работает довольно хорошо, но когда я хочу загрузить больше, чем это количество вопросов, страница загружается очень медленно. Я хотел бы знать, можно ли, основываясь на моделях и коде, который я размещу ниже, как-то улучшить эффективность запросов и/или время загрузки

models.py

views.py

def ppl_exam_generator_util(request, subjects):
    question_list = [Question.objects.filter(question_subject=subject).order_by(
        '?')[:int(subject.exam_questions_num)]for subject in subjects]
    quiz_profile = QuizProfile(
        user=request.user, quiz_type='ppl_exam')
    quiz_profile.save()
    for ques in question_list:
        for q in ques:
            question = Question.objects.get(id=q.id)
            quiz_attempt = QuizAttempt(quiz_profile=quiz_profile,
                                       question=question)
            quiz_attempt.save()
            question_draft = QuestionDraft(
                question=question, text=question.text, quiz_profile=quiz_profile)
            question_draft.save()
            quiz_draft = QuizDraft(
                quiz_profile=quiz_profile, question_draft=question_draft)
            quiz_draft.save()
            answers = Answer.objects.filter(question__id=question.id)
            shuffle(list(answers))
            for ans in answers:
                draft_answer = AnswerDraft(
                    question_draft=question_draft, answer=ans, text=ans.text, quiz_profile=quiz_profile)
                draft_answer.save()
    return HttpResponseRedirect(reverse('quiz:new_ppl_exam', kwargs={'pk': quiz_profile.id}))

Я пробовал также использовать инструмент connection.queries, который предоставляет Django, но каждый запрос выполняется довольно быстро. Я не знаю, проблема ли это со вложенным forloop или что-то еще.

Вернуться на верх