Как вставить несколько рядов данных из динамически сгенерированных строк в базу данных с помощью Python Django

У меня есть функция Javascript (addItem), которая позволяет пользователю добавить любое количество динамически сгенерированных строк данных и заполнить необходимые поля. Смотрите код ниже

                                <div class="modal-body">
                                    <table class="table order-list table-striped" id="myTable">
                                        <thead>
                                            <tr>
                                                <th>Item</th>
                                                <th>Quantity</th>
                                                <th>Price</th>
                                                <th>Total</th>
                                            </tr>
                                        </thead>
                                            <tbody id="addItems">

                                        </tbody>
                                    </table>
                                    <table>
                                        <tbody>
                                            <tr>
                                                
                                                <td colspan="5" style="text-align: left;">    
                                                    <button onclick="addItem();" class="btn btn-sm btn-success" id="sspusd1" value="Add Row"><i class="fa fa-plus"></i>Add Row</button>
                                                </td>
                                                <td colspan="5" style="text-align: left;">    
                                                   
                                                </td>

                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
function addItem() {
    renumber++;
    var html = "<tr>";
        
        html  += "<td><select class='form-control'>{% for stock in stocks %}<option class='dropdown-item' value='{{stock.inventoryPart}}'>{{stock.inventoryPart}}</option>{% endfor %}</select></td>";
        html  += "<td><input type='number' class='form-control' onblur='lineTotal(this);' value='0' name='quantity[]'/></td>";
        html  += "<td><input type='text' class='form-control' onblur='lineTotal(this);' value='0' name='price[]'/></td>";
        html  += "<td><input type='text' id='lineTotal' class='form-control' value='0' disabled name='total[]' /></td>";

        html += "</tr>";
        document.getElementById("addItems").insertRow().innerHTML = html;
    };

Однако, человек может вставить любое количество строк и вставить необходимые данные в доступные поля.

Проблема в том, что я не могу перехватить и сохранить динамическую информацию, введенную в эти динамические строки, поскольку Django не знает, сколько строк создал пользователь.

Цель состоит в том, чтобы иметь возможность хранить данные из созданных динамических строк, вставленных пользователем, в базе данных, используя Django

Насколько возможна такая функциональность? Я хотел бы получить помощь в этом вопросе. Спасибо.

Лучшим решением, которое я вижу, является использование наборов форм с HTMX. Вы можете последовать этому отличному руководству https://justdjango.com/blog/dynamic-forms-in-django-htmx

Предполагаю, что где-то в вашем html есть форма, подобная этой:

<form action="" method="post">
 <!-- Your table etc. here -->
</form>

В этом случае попробуйте модифицировать представление таким образом:

if request.method == 'POST':
    stocksArr = request.POST.getlist('stock')
    quantityArr = request.POST.getlist('quantity')
    priceArr = request.POST.getlist('price')
    totalArr = request.POST.getlist('total')

    print("---Array Data---")
    print(stocksArr)
    print(quantityArr)
    print(priceArr)
    print(totalArr)

Возможно, ваша форма не находила if 'Receipttotal' in request.POST:. Попробуйте этот способ и дайте мне знать, если это решит вашу проблему.

Вернуться на верх