Как заполнить набор форм django Model FormSet экземплярами модели И значениями полей по умолчанию

Проблема заключается в том, как заполнить каждую форму Model Formset с помощью queryset, а также предоставить начальные данные несвязанным формам в наборе форм. Почему? У меня есть модель под названием Answer. Я хочу создать множество ответов на вопрос модели, а каждый вопрос находится в разделе, другой модели. Когда я нахожусь на странице детализации вопроса, я уже знаю Раздел и Вопрос, к которым должен принадлежать объект Ответ, и в конечном итоге они будут просто отображаться как скрытые поля, но они мне нужны для того, чтобы сохранить объект Ответ.

Мои модели (сведенные к основным полям):

class Section(models.Model):
    section = models.CharField(max_length=100)

    def __str__(self):
        return self.section


class Question(models.Model):
    question = models.CharField(max_length=500)
    section = models.ForeignKey(Section, on_delete=models.CASCADE)

    def __str__(self):
        return self.question


class Answer(models.Model):
    answer = models.CharField(max_length=200, null=True, default='')
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    section = models.ForeignKey(Section, on_delete=models.CASCADE)

    def __str__(self):
        return self.answer

Моя форма:

class AddAnswerForm(forms.ModelForm):

    class Meta:
        model = Answer
        fields = ['answer', 'question', 'section']

Я хочу сделать это с помощью модельных наборов форм, поскольку пользователь должен иметь возможность продолжать добавлять ответы, а также редактировать ранее данные ответы. Я просмотрел docs, которые для django превосходны, и нашел, как добавить начальные данные здесь. Первоначально шаблон отображал ВСЕ объекты Answer, что, как я видел, делается по умолчанию, пока я не увидел this о том, как использовать queryset для ограничения результатов. Затем попытался использовать

initial={'section': section, 'question': question}

Что создало KeyError

Итак, как мне предоставить значения по умолчанию section и question каждому ответу в наборе форм, и в то же время заполнить связанные формы набора форм ранее сохраненными объектами Answer?

Ответ, который есть в docs и на stackoverflow, при довольно большом количестве поисков и проб, оказался довольно простым. Для меня это закончилось тем, что я поставил инициалы в [ ]

views.py

    AnswerFormSet = modelformset_factory(Answer, form=AddAnswerForm)
    formset = AnswerFormSet(request.POST or None, 
                            initial=[{'section': section, 'question': question}], 
                            queryset=Answer.objects.filter(question=question))

    if formset.is_valid():
        formset.save()
        return redirect('question', question.pk, question.question)

Теперь он работает нормально, но если вопрос был дубликатом, или если есть лучший метод, я был бы признателен за обратную связь. После нескольких часов борьбы, я подумал, что это будет полезно для других в аналогичной ситуации.

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