python - 无法从模板中的数据表中的所有分页发送复选框数据以在 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)
解决方案
您可以直接使用Datatables api 中的select 属性,而不是使用复选框。检查数据表中的选择行
此外,由于您想一次选择多行,您可以考虑在 Datatables中选中 Multi Select rows
您可以在第 0 列中添加 id,然后
dataTable = $(.selector).Datatable()
dataTable.columns([0]).visible(false);
您可以像这样隐藏该列,然后当您发送请求时,您仍然拥有您的 ID
推荐阅读
- wordpress - WordPress | 是否可以使用钩子在帖子标题的标记之后插入标记?
- java - Printing docx by Java
- mongoose - Mongoose fails to populate virtual when foreignField is an Array
- docker - Kompose 功能类似于 docker-compose links
- php - 在分形集合元数据中添加总和
- jsf-2 - 在 HttpSessionListener 中是否可以使用人脸上下文?
- ruby-on-rails - 如何确定 before_action 的调用者
- reactjs - 如何在 reactjs 中禁用 SelectTable 中的某些单选按钮?
- go - 如何使用 go 模块导入非 go 目录(例如:C src/)?
- javascript - Update array with add method in javascript