Подтвердить что ты не робот

Django представляет две разные формы с одной кнопкой отправки

Можно ли отправить две разные формы, с одной кнопкой отправки в django? У меня есть одна форма под названием "инструмент" и 4 равные формы "config". теперь я бы хотел отправить всегда одну конфигурацию и инструмент. например инструмент + config 1 и инструмент + config 2. и каждая конфигурация имеет свою собственную кнопку отправки.

Я попробовал его с одной кнопкой в ​​форме конфигурации:

<input onclick="submitForms()" class="btn btn-primary cfg" type="submit" value="Start" >

и вызовите функцию js 'onclick':

submitForms = function(){
    console.log('ok'); //only for testing
    document.forms["firstForm"].submit();
    document.forms["secondForm"].submit();
}

это мой метод в views.py:

if request.method == 'POST':
        form1 = dataproviderInstrumentForm(request.POST)
        form2 = dynamicTimeseriesForm(request.POST)
        print(request.POST)
        if form1.is_valid() or form2.is_valid(): 
            # do some stuff

else:
    form1 = dataproviderInstrumentForm() # an unbound form
    form2 = dynamicTimeseriesForm() # an unbound form
4b9b3361

Ответ 1

Вместо того, чтобы иметь несколько тегов <form ..> в html, используйте только один тег <form> и добавьте в него поля всех форм.

Пример в шаблоне

<form >
    {{ form1.as_p }}
    {{ form2.as_p }}
    {{ form3.as_p }}
</form>

Поэтому, когда пользователь отправляет форму, вы получите все данные форм, а затем можете делать то, что вы делаете. Как

if request.method == 'POST':
        form1 = Form1(request.POST)
        form2 = Form2(request.POST)
        print(request.POST)
        if form1.is_valid() or form2.is_valid(): 

Лучше использовать form prefix в таких случаях.

Итак, вы можете сделать

if request.method == 'POST':
        form1 = Form1( request.POST,prefix="form1")
        form2 = Form2( request.POST,prefix="form2")
        print(request.POST)
        if form1.is_valid() or form2.is_valid(): 
else:
        form1 = Form1(prefix="form1")
        form2 = Form2(prefix="form2")