Передача одного и того же случайно сгенерированного списка в представлениях POST и GET в python/django

Я разрабатываю приложение для викторины, которое извлекает случайное подмножество из 3 вопросов из кверисета Trivia. Я могу сгенерировать случайное подмножество без проблем и отобразить 3 вопроса с множественным выбором. Но когда пользователь делает выбор и отправляет ответ, представление trivia генерирует новое случайное подмножество. Таким образом, ответы пользователя сравниваются с правильными ответами нового случайного подмножества, а не первоначального подмножества, которое просматривал пользователь. Как я могу создать это случайное подмножество и использовать его в методах GET и POST моего представления? То есть я хочу, чтобы кверисет "trivia" был идентичен в обоих методах GET и POST. Идеи?

def trivia(request):

trivia_id_list = Trivia.objects.values_list('id', flat=True)
random_trivia_id_list = random.sample(list(trivia_id_list), min(len(trivia_id_list),3))
trivia = Trivia.objects.filter(id__in=random_trivia_id_list)

if request.method == 'POST':
    correct = 0
    incorrect = 0
    total = 0

    for t in trivia:
        print(request.POST.get(t.question))
        print(t.answer)
        print()
        if t.answer == request.POST.get(t.question):
            correct = correct + 1
        else:
            incorrect = incorrect + 1
        total = total + 1
    result = correct/total
    return render(request, 'ColdBlooded/result.html', {
        "Incorrect": incorrect,
        "Correct": correct,
        "Total": total,
        "Trivia": trivia,
        "Result": result,
    })
else:
    return render(request, "ColdBlooded/trivia.html", {
        "Trivia": trivia
    })

Проблема заключается в первых трех строках

trivia_id_list = Trivia.objects.values_list('id', flat=True)
random_trivia_id_list = random.sample(list(trivia_id_list), min(len(trivia_id_list),3))
trivia = Trivia.objects.filter(id__in=random_trivia_id_list)

При каждом посещении страницы выполняется вышеуказанный блок кода. Например, если пользователь посетит страницу(GET) запрос, вышеуказанный блок кода вернет три случайных вопроса. Если пользователь попытался ответить на вопросы(POST) запроса, вышеуказанный блок кода будет вызван снова и сгенерирует другой вопрос, отличный от того, который был в GET запросе.

Простое решение: Поместите первые три строки в функцию и вызывайте их только в GET-запросе (условие else), а в случае POST сравнивайте результаты с теми, что были в POST. Обязательно определите список, содержащий вопросы, вызываемые в GET, и очищайте его при каждом вызове POST.

Примечание:

Определите список, содержащий три вопроса, как глобальную переменную, чтобы она не инициализировалась каждый раз.

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