Django QA формы с секциями
Я застрял и пытаюсь объяснить вам, чего я пытаюсь достичь.
Я создаю приложение для создания, организации и реагирования на оперативные контрольные списки.
У меня такая структура: контрольный список -> раздел -> вопрос -> тип ответа -> ответ
Каждый вопрос может иметь различный и настраиваемый тип ответа, например:
- огнетушитель находится в правильном месте: Да / Нет
- в каком состоянии находится главный выключатель: Вкл/Выкл
Я создал модели/виды/формы для управления и сортировки "контрольный список -> раздел -> вопрос -> тип ответа -> ответ" и это работает.
Вот model.py
class Checklist(models.Model):
class Meta:
verbose_name = "Checklist"
verbose_name_plural = "Checklists"
name = models.CharField(max_length=64)
Description = models.CharField(max_length=64)
def __str__(self):
return self.name
class Section(OrderedModel):
class Meta:
ordering = ('order',)
verbose_name = “Section”
verbose_name_plural = “Sections”
name = models.CharField(max_length=64)
description = models.CharField(max_length=64)
checklist = models.ForeignKey(
Checklist, on_delete=models.CASCADE, blank=True, null=True, default=None, related_name=‘section_rel')
def __str__(self):
if self.checklist:
return self.checklist.name + " - " + self.name
else:
return self.name
class AnswersValue(models.Model):
class Meta:
verbose_name = "Answers Value"
verbose_name_plural = "Answers Values”
name = models.CharField(max_length=16, unique=True)
value = models.CharField(max_length=16, unique=True)
def __str__(self):
return self.name
class AnswerType(models.Model):
class Meta:
verbose_name = "Answer Type"
verbose_name_plural = "Answer Types”
name = models.CharField(max_length=24, unique=True)
values = models.ManyToManyField(AnswersValue)
def __str__(self):
return self.name
class Question(OrderedModel):
class Meta:
ordering = ('order',)
verbose_name = “Question”
verbose_name_plural = "Questions”
text = models.CharField(max_length=64)
description = models.CharField(
max_length=64, null=True, blank=True)
section = models.ForeignKey(
Section, on_delete=models.CASCADE, related_name=‘question_rel')
answer_type = models.ForeignKey(
AnswerType, on_delete=models.CASCADE)
Затем я создал модель для сбора ответов контрольного списка:
class FilledModule(models.Model):
class Meta:
verbose_name = "Filled Module"
verbose_name_plural = "Filled Modules”
name = models.CharField(max_length=64)
checklist = models.ForeignKey(
Checklist, on_delete=models.CASCADE)
def __str__(self):
if self.checklist:
return self.name + " - " + self.checklist.name
else:
return self.name
class Response(models.Model):
class Meta:
verbose_name = "Response Module"
verbose_name_plural = "Response Modules”
module = models.ForeignKey(
FilledModule, on_delete=models.CASCADE)
question = models.ForeignKey(
Question, on_delete=models.CASCADE)
answer = models.ForeignKey(
AnswersValue, on_delete=models.CASCADE)
def __str__(self):
if self.module:
return "[id.module: " + str(self.module.id) + "] - " + self.module.name + " - " + self.module.checklist.name + " - " + self.question.text
else:
return self.question.text
Я создал представление, из которого для каждого идентификатора контрольного списка я получаю разделы и связанные с ними вопросы. но тут у меня возникает проблема...
Как создать форму, содержащую различные ответы, которые можно выбрать для каждого вопроса в каждом разделе?
На данный момент я создаю два списка, один из которых содержит объекты разделов, а вложенный список содержит вопросы_объекты каждого раздела, но я не уверен, что это действительно служит цели...
def fill_checklist(request, id_checklist, template_name='checklist/compile_checklist.html'):
list_question = []
list_sections = []
checklist = Checklist.objects.get(pk=id_checklist)
sections = checklist.section_rel.all()
for section in sections:
list_sections.append(section)
section_questions = []
for question in section.question_rel.all():
section_questions.append(question)
list_question.append(section_questions)
Сейчас мне нужна форма, структурированная следующим образом:
_____________________________
CHECKLIST TITLE & DESCRIPTION
COMPILED BY: <name>
SECTION TITLE 1:
QUESTION id1: <RESPONSE based on ANSWER TYPE>
QUESTION id3: <RESPONSE based on ANSWER TYPE>
SECTION TILE 2:
QUESTION id8: <RESPONSE based on ANSWER TYPE>
[...]
<SUBMIT>
_____________________________
... что создать FilledModule, который сохраняет 'checklist_id' и 'name', а затем хранит каждый ответ в модели Response с 'fileldmodule_id', 'question_id' и 'response_id'.
Я испытываю серьезные затруднения в понимании того, как структурировать форму и связанный шаблон для достижения этой цели, любая помощь в выборе правильного пути будет очень признательна.
У меня есть ощущение, что я думаю сложным образом о простой вещи, но не могу достичь результата :-|
Спасибо
(я перевел название переменных IT2EN на лету и надеюсь, что не допустил ошибок)