Django - несколько экземпляров одного и того же класса формы в одном представлении - PullRequest
0 голосов
/ 26 июня 2018

В контексте форм Django я видел много дискуссий по обработке различных типов form s на одной странице (например, AForm и BForm на одной странице), но я пытаюсьпонять, как обрабатывать несколько экземпляров одного и того же класса form на странице.

Я могу нормально отображать формы, но не знаю, как с ними обращаться, когда формы POST изд.

Я также пытался использовать Formset s, и у меня та же проблема (может отображаться, но не знаю, как обрабатывать POST).

Итак, вот мой вопрос: допустим, я отображаю несколько экземпляров одного и того же Form класса на странице.Как мне поступить с данными POST при отправке этих форм?

Редактировать:

Проблема с formset заключается в том, что у меня есть пользовательская форма и мне трудно использовать formset для обработки POST данных.

Правка 2 - предоставление более подробной информации с учетом ответа @ neverwalkaloner.

Вот мой класс форм:

class QuestionForm(forms.Form):
def __init__(self, question, data=None, *args, **kwargs):
    super(QuestionForm, self).__init__(*args, **kwargs)
    choice_list = [x for x in question.get_answers_list()]
    self.fields['answers'] = forms.ChoiceField(choices=choice_list,
                                            widget=RadioSelect)

    self.fields['answers'].label = question.content

Я создаю различные формы с префиксом, например так: form = QuestionForm(question=question, prefix=prefix)

Затем обрабатываю данные POST следующим образом: form = QuestionForm(data=request.POST, question=question, prefix=prefix)

Тем не менее, формы не связываются с вышеуказанным подходом :(

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете использовать аргумент prefix для инициализации нескольких форм в вашем представлении:

mother = PersonForm(request.POST, prefix="mother")
father = PersonForm(request.POST, prefix="father")

return render(request, 'some_template.html', {
    'mother': mother,
    'father': father,
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...