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 на лету и надеюсь, что не допустил ошибок)

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