Сохранение данных формы на основе поля из другой модели

Я создаю форму, которая использует динамические вопросы/ответы с моделями вопросов и ответов, чтобы новые вопросы могли создаваться не разработчиками.

Вот мои текущие модели (пропуская некоторую ненужную информацию для этого вопроса)

models.py

class Question(models.Model):
    question = TextField()
    is_active = BooleanField(default=False)

    def __str__(self):
        return self.question

class Answer(models.Model):
    answer = TextField()
    question = ForeignKey(Question, on_delete=CASCADE, default=None)

В представлении я создаю форму следующим образом. views.py

def survey(request):
    custom_questions = Question.objects.filter(is_active=True)
    if request.method == "POST":
        formset = []
        for q in custom_questions:
            formset.append(AnswerForm(request.POST))
        ### Here is where I would like to process this data
       
    else:
      formset = []
      for q in custom_questions:
        answer_form = AnswerForm()
        answer_form.fields['answer'].label = q.question
        formset.append(answer_form)
    return render(request, 'template.html', {'formset': formset})

Как бы я обработал эти данные, основываясь на заданном вопросе?

Вот что я попробовал, чтобы посмотреть, какая информация обрабатывается в форме:

for q in custom_questions:
    answer_form = AnswerForm(request.POST)
    if answer_form.is_valid():
        print(answer_form.cleaned_data['answer']

Однако, когда он печатал данные, он печатал один и тот же ответ несколько раз.

Я хотел бы:

  1. Use the label that was defined in the GET request to Question.objects.get(question=) in order to set the foreignkey field to the Answer model.
  2. Get the correct data based on the question that it is answering.
  3. Create a new Answer model with this information.

Вот моя анкета для справки:

class AnswerForm(ModelForm):
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['answer'].required = True

  class Meta:
      model = Answer
      fields = ['answer']
Вернуться на верх