Django forms - нужна форма, которая показывает набор вопросов, каждый вопрос имеет список возможных ответов

У меня есть следующие три модели:

models.py

class Exam(models.Model):
    lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE, related_name="exams")
    passing_grade = models.IntegerField(default=85)
    must_pass = models.BooleanField(default=True)
    to_next_lesson = models.BooleanField(default=True)
    display_order = models.IntegerField(default=1)


class ExamQuestion(models.Model):
    exam = models.ForeignKey(Exam, on_delete=models.CASCADE, related_name="questions")
    text = models.CharField('Question', max_length=255)


class ExamAnswer(models.Model):
    question = models.ForeignKey(ExamQuestion, on_delete=models.CASCADE, related_name="answers")
    text = models.CharField('Answer', max_length=255)
    is_correct = models.BooleanField('Correct answer', default=False)

Нужная мне форма должна отображать каждый вопрос в экзамене примерно так (извините, не смог понять, как показать отображаемый html в вопросе:

<form>
<div>
"Quality" is one our core values<br />
<input type="radio"/> True <br />
<input type="radio"/> False
</div>
<div>
What should you do if you see an employee stealing?<br />
<input type="radio"/> Report it to your manager<br />
<input type="radio"/> Call the police<br />
<input type="radio"/> Confront the employee<br />
</div>
<div>
<input type="submit"> 
</div>
</form>

Не обращая внимания на неполный и, возможно, глупый HTML (здесь показаны голые кости для концепции) Как я могу заставить язык форм Django выводить каждый отдельный вопрос с несколькими ответами под ним?
Примечание: Количество вопросов может быть разным, в некоторых экзаменах может быть 3 вопроса, в других - 5 или 6. Количество ответов на каждый вопрос также переменное, некоторые вопросы могут иметь два ответа - обычно истина или ложь, другие могут иметь четыре или пять ответов (сейчас для каждого вопроса есть только один правильный ответ, поэтому всегда используются радиокнопки)

Запрос в представлении получает пк экзамена и извлекает соответствующие текстовые записи из таблиц ExamQuestion и ExamAnswer.

Я могу поместить вопросы и ответы в любой набор queryset, список или словарь, необходимый для шаблона, но я не смог понять, как заставить их правильно отображаться в шаблоне.

В формах Django вы просто:


STEALING= [
    ('Report it to your manage', 'Report it to your manage'),
    ('Call the police', 'Call the police'),
    ('Confront the employee', 'Confront the employee')
    ]

class UserForm(forms.Form):
    your_form_field_name = forms.CharField(label='What should you do?', widget=forms.Select(choices=STEALING))

Я так и не нашел способа сделать это с помощью формы в forms.py, поэтому я просто создал необходимый HTML в view(controller), передал его в шаблон и отобразил его. HTML, необходимый для каждого вопроса, был аналогичен тому, что я показал в вопросе: div, показывающий вопрос, затем в каждом div после этого создаются радиокнопки (добавляя соответствующий атрибут name="" для создания радиогруппы) и возможные ответы. Повторяя это для такого количества вопросов и ответов, которые были получены из базы данных.

Это сработало идеально, дало именно те результаты, которые мне были нужны.

Насколько я могу судить по своим исследованиям, базовые формы Django Forms в целом предназначены для того, что большинство людей считают формой: Серия полей, которые нужно заполнить, (включая несколько таких форм в наборе форм), а не формат опроса, где есть вопрос, а затем несколько ответов на выбор.

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