Сохранение данных формы на основе поля из другой модели
Я создаю форму, которая использует динамические вопросы/ответы с моделями вопросов и ответов, чтобы новые вопросы могли создаваться не разработчиками.
Вот мои текущие модели (пропуская некоторую ненужную информацию для этого вопроса)
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']
Однако, когда он печатал данные, он печатал один и тот же ответ несколько раз.
Я хотел бы:
- 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.
- Get the correct data based on the question that it is answering.
- 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']