首页 > 解决方案 > 无法从模板中的数据表中的所有分页发送复选框数据以在 django 中查看

问题描述

我的 django 模板中有一个数据表,其中每一行旁边都有一个复选框,用于将行数据发送到视图函数,以便在 django 模型中进行一些大规模更新。但问题是,如果多行在分页中的同一页面上,那么我可以准确发送数据但是如果我从第 1 页选择第 2 行,从第 3 页选择第 5 行,则只有第 3 页中的行值将发送到视图功能.!

模板.HTML

{% block jquery %}
<script type="text/javascript" class="init">
    $(document).ready( function ($) {
        var $submit = $("#updiv").hide(),
            $cbs = $('input[name="updelegate"]').click(function() {
                $submit.toggle( $cbs.is(":checked") );
            });
       $('#myTable').DataTable({
            dom: 'lBfrtip',
            "pageLength": 1,
            "language": {
              "emptyTable": "No Delegates Available",
              "sSearch": "Search Delegates: ",
              "info": " Showing _START_-_END_ out of Total _TOTAL_ Delegates",

            }
        });
    });



</script>
{% endblock %}
<form id="myForm" action="{% url 'mass-delegates' %}" method="POST">
                        {% csrf_token %}
                        <table id="myTable" class="table table-striped table-bordered" style="width:100%">
                            <thead class="thead-dark">
                            <tr>
                                <th></th>
                                <th scope="col">#</th>
                                <th scope="col">Name</th>
                                <th scope="col">Email</th>
                                <th scope="col">Phone</th>
                                <th scope="col">Company</th>
                                <th scope="col">Designation</th>
                                <th scope="col">Address</th>
                                <th scope="col">City</th>
                                <th></th>
                                <th></th>
                            </tr>
                            </thead>
                            <tbody>
                            {% for del in delegates %}
                            <tr>
                                <td>
                                    <label class="container">
                                        <input type="checkbox" id="updelegate" name="updelegate"
                                               value="{{ del.id }}">
                                        <span class="checkmark"></span>
                                    </label>
                                </td>
                                <td>{{ del.id }}</td>
                                <td>{{ del.first_name }} {{ del.last_name }}</td>
                                <td>{{ del.email }}</td>
                                <td>{{ del.phone }}</td>
                                <td>{{ del.company }}</td>
                                <td>{{ del.designation }}</td>
                                <td>{{ del.address }}</td>
                                <td>{{ del.city }} ({{ del.pincode }})</td>
                                <td>
                                    <a href="{% url 'delegate' dataset_id=del.dataset_id %}">View</a>
                                </td>
                                <td>
                                    <a href="{% url 'edit-delegate' id=del.id %}">Edit</a>
                                </td>
                            </tr>
                            {% endfor %}
                            </tbody>
                        </table>
                        <div id="updiv">
                            <select name="eventid">
                                {% for ev in events %}
                                <option value="{{ ev.id }}">{{ ev.name }}</option>
                                {% endfor %}
                            </select>
                            <input type="submit" onclick="return confirm('Confirm Adding to Event?');" class="upbtn"
                                   name="update" value="Add to Event"/>
                        </div>
                    </form>

视图.PY

def mass_delegates(request):
    if request.method == 'POST':
        toupdate = request.POST.getlist('updelegate')
        eventid = request.POST.get('eventid')
        array_length = len(toupdate)
        for i in range(array_length):
            if not EventDelegate.objects.filter(event_id=eventid, delegate_id=toupdate[i]).exists():
                EventDelegate.objects.create(event_id=eventid, delegate_id=toupdate[i])

        return event_det(request, eventid)

标签: pythonjquerydjangodatatabledjango-views

解决方案


您可以直接使用Datatables api 中的select 属性,而不是使用复选框。检查数据表中的选择行

此外,由于您想一次选择多行,您可以考虑在 Datatables中选中 Multi Select rows

您可以在第 0 列中添加 id,然后

dataTable = $(.selector).Datatable() 

dataTable.columns([0]).visible(false);

您可以像这样隐藏该列,然后当您发送请求时,您仍然拥有您的 ID


推荐阅读