Ошибка: MultiValueKeyError в / quiz / 2/11 'choice' - PullRequest
0 голосов
/ 11 апреля 2020

Я создаю приложение с несколькими вариантами ответов , я создал вид, который показывает вопрос и 4 варианта. Я установил переключатель для каждой опции, но выдаю мне эту ошибку:

MultiValueDictKeyError в / quiz / 2/11 / 'choice'

views.py

def question_detail(request,question_id,quiz_id):
    q = Quiz.objects.get(pk=quiz_id)
    que = Question.objects.get(pk=question_id)
    ans = que.answer_set.all()
    selected_choice = que.answer_set.get(pk=request.POST['choice'])
    if selected_choice is True:
        come = que.rank
        came = come + 1
        later_question = q.question_set.get(rank=came)
        return render(request,'app/question_detail.html',{'que':que , 'later_question':later_question, 'ans':ans})
    else:
        come = que.rank
        later_question = q.question_set.get(rank=come)
        return render(request, 'app/question_detail.html', {'que': que, 'later_question': later_question, 'ans': ans})

question_detail. html

<form action="{% 'app:detail' quiz_id=quiz.id question_id=que.id %}" method="post">
    {% csrf_token %}
    {% for choice in que.answer_set.all %}
        <input type="radio" name="choice" id="choice{{forloop.counter}}" value="{{choice.id}}">
        <label for="choice{{forloop.counter}}">{{choice.answer}}</label>
    {% endfor %}
</form>

1 Ответ

0 голосов
/ 11 апреля 2020

Хорошо, как я уже сказал в своем комментарии, вы, скорее всего, получите эту ошибку, потому что объект POST будет пустым во время обычного запроса GET. Таким образом, вы должны обернуть все, что должно произойти после запроса в блоке IF:

if request.method === 'POST':
    selected_choice = que.answer_set.get(pk=request.POST['choice'])
    # Every other post-submit task  

Вы всегда должны проверять метод POST в своих представлениях, если вы ожидаете данные формы. Другие ответили на этот вопрос более подробно ранее, поэтому я просто направлю вас туда:

Что означает request.method == "POST" в Django?

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