Я пытаюсь получить форму для создания полей в зависимости от того, на какой странице экзамена находится пользователь. На странице ошибок все локальные переменные имеют правильное значение для формы и представления, но я продолжаю получать объект ExamQuestion
не повторяемый и ошибку в строке 0 шаблона. Он также выделяет render () в строке 44 в представлении как источник проблемы. Если я изменю строку 28 с exam__name=exam_name
на exam__name="exam_name"
, по сути, превращая переменную в str, страница запускается, но данные не передаются.
В консоли ошибок choice_list показывает querysets
как отдельные элементы спискакак это должно быть для forms.py
Как сделать объект ExamQuestion итеративным? Я был в тупике уже неделю. К этому моменту я написал сто способов.
Я знаю, что в нем перечислены вопросы вместо ответов на вопросы, я просто пытаюсь заставить его загрузить ЛЮБОЙ queryset
и в этот момент ошеломляюще бегать.
просмотр
def exampage(request, exam_name):
exams = Exam.objects.all()
questionlist = ExamQuestion.objects.filter(exam__name=exam_name)
choicelist = ExamChoice.objects.filter(question__exam__name=exam_name)
form = ExamTest(request.POST, exam_name=exam_name)
if request.method == "POST":
if form.is_valid():
#form.save()
#choice = form.cleaned_data.get('choice')
return redirect('exampage.html')
return render(request, 'exams/exampage.html', {'exams': exams,'questionlist': questionlist, 'exam_name': exam_name, 'choicelist': choicelist, 'form': form, 'choice': choice})
else:
form = ExamTest(exam_name=exam_name)
return render(request, 'exams/exampage.html', {'exams': exams,'questionlist': questionlist, 'exam_name': exam_name, 'choicelist': choicelist, 'form': form})
форма
class ExamTest(forms.Form):
def __init__(self, *args, **kwargs):
exam_name = kwargs.pop('exam_name')
super(ExamTest, self).__init__(*args, **kwargs)
#choice_list = [x for x in ExamQuestion.objects.filter(exam__name="dcjs01")]
#choice_list = []
x = ExamQuestion.objects.filter(exam__name=exam_name)
#for q in x:
# choice_list.append(q)
self.fields["choices"] = forms.ChoiceField(choices=x, label="testlabel")
шаблон
{% extends 'portal/base.html' %}
{% block content %}
<h1>{{ exam_name }} Page</h1>
{{ exam_id }}
<hr>
{% for exam in exams %}
<li><a href="/exams/{{ exam.name }}/">{{ exam }}</a></li>
{% endfor %}
<h1>! {{ questionlist }} !</h1>
<form method="post" action="#">
{% csrf_token %}
formtest{{ form }}
<button type="submit"> finish test </button>
</form>
{% endblock %}