Мой modelformset сохраняет только первую сгенерированную форму и не добавляет остальные.

У меня есть до 4-5 форм, наборы форм приходят последними, я использовал javascript, чтобы генерировать больше форм по нажатию кнопки. После отправки и валидации, только данные первой формы сохраняются в базе данных, остальные нет, как я могу это исправить, пожалуйста?

Это мой файл views.py

@login_required(login_url='login')
def addItem(request, id) -> render:
    res_name = Restro.objects.get(user=request.user)
    menuobj = Main.objects.get(restro_name=res_name)

    sub_form = createSubCartForm(request.POST)
    itemformset = modelformset_factory(Item, form=addItemForm, extra=0, fields=['itname', 'quantity'])
    itemform = itemformset(request.POST or None)
    
    vsub_form = createVSubCartForm(request.POST)
    vitemformset = modelformset_factory(v_Item, form=addVItemForm, extra=0, fields=['vname'])
    vitemform = vitemformset(request.POST or None)
    vformset = modelformset_factory(ItemVariation, form=addItemVariationForm, extra=0, fields=['iname', 'varprice', 'quantity'])
    vform = vformset(request.POST or None)

    if 'nonala' in request.POST:
        if request.POST.get('cate1') == 'Non-Ala Carte':
            if all([sub_form.is_valid(), itemform.is_valid()]):
                global pare
                pare = sub_form.save(commit=False)
                pare.main_category = Main.objects.get(restro_name=res_name)
                pare.save()
                for form in itemform:
                    child = form.save(commit=False)
                    child.user = request.user
                    child.sub_category = Sub.objects.get(id=pare.id)
                    child.save()
                    return redirect('cust')
    elif 'ala' in request.POST:
        if request.POST.get('cate2') == 'Ala Carte':
                print(request.POST)            
    context = {
        'm_name': menuobj.main_category,
        'sub_form': sub_form,
        'itemform': itemform,
        'vsub_form': vsub_form,
        'vitemform': vitemform,
        'vform': vform
        }
    return render(request, 'item_form.html', context)

Это мой файл шаблонов

<form id="non-alacart" action="" method="post" class="hidden">
            {% csrf_token %}
            <h3 class="text-center" style="font-weight: bold;">Create Sub Cartegory for <span id="mn">{{ m_name }}</span> Category</h3>
            <input type="text" name="cate1" id="main_ca" readonly="readonly">
            <div id="item">
                <div class="row">
                    <label class="col-form-label text-center">Sub Category Name<br/>{{sub_form.sname}}</label>
                    <label class="col-form-label text-center">Sub Category Price<br/>{{sub_form.sprice}}</label>
                    <br>
                    <label class="col-form-label text-center">Items<br>
                        <button id="add" type="button" class="btn btn-light link-success border rounded border-success" id="add" type="button" style="width: 119.5px;">
                            <i class="la la-plus" style="color: rgb(0,0,0);"></i>&nbsp;Add Item
                        </button>
                    </label>
                </div>
                {% if itemform %}
                {{ itemform.management_form }}
                <div id='item-list' class="row">
                    {% for form in itemform %}
                        <div class="item-form">
                            {{form}}
                        </div>
                    {% endfor %}
                </div>
                <div id="emp-form" class="hidden">{{ itemform.empty_form }}</div>
                {% endif %}
            </div>
            <div class="row">
                <div class="col">
                    <div class="col d-lg-flex justify-content-lg-center">
                        <button id="nal" class="btn btn-success link-light border rounded border-success" type="submit" name="nonala" style="width: 119.5px;">Submit</button>
                    </div>
                </div>
            </div>
        </form>

и скрипт для генерации большего количества форм

const addfield = document.getElementById('add');
        const totalnewforms = document.getElementById('id_form-TOTAL_FORMS')

        addfield.addEventListener('click', additem);
        function additem(event){
            if (event){
                event.preventDefault();
            }
            const itemformno = document.getElementsByClassName('item-form')
            const itemformcount = itemformno.length//+1
            const emp_form_list = document.getElementById('item-list')
            const emp_form = document.getElementById('emp-form').cloneNode(true)
            emp_form.setAttribute('class', 'item-form row')
            emp_form.setAttribute('id', `form-${itemformcount}`)
            var p = document.getElementsByTagName('p');
            for(var i = 0; i < p.length; i++){
                p[i].setAttribute('class', 'col');
            };
            const regex = new RegExp('__prefix__', 'g')
            emp_form.innerHTML = emp_form.innerHTML.replace(regex, itemformcount)
            emp_form_list.append(emp_form)
            totalnewforms.setAttribute('value', itemformcount+1)
        }
Вернуться на верх