Как заполнить набор форм 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)
Теперь он работает нормально, но если вопрос был дубликатом, или если есть лучший метод, я был бы признателен за обратную связь. После нескольких часов борьбы, я подумал, что это будет полезно для других в аналогичной ситуации.