在Django中选中表行时,我希望删除对象。在回答了Stackoverflow之后,我得到了下面的代码。然而,它并没有删除模型的对象。我记录代码;onclick删除按钮可以工作。它调用delete_test函数,但测试模型不是delete。终点站说
禁止(CSRF令牌丢失或不正确):/test-management/delete_test/
提前感谢!
urls.py
from test_management.views import (test_list, add_test
, delete_test)
urlpatterns = [url(r'^test-management/test/', test_list, name='test'),
url(r'^test-management/add_test/', add_test, name='add_test'),
url(r'^test-management/delete_test/', delete_test, name='delete_test'),]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)views.py
def delete_test(request):
if request.is_ajax():
selected_tests = request.POST['test_list_ids']
selected_tests = json.loads(selected_tests)
for i, test in enumerate(selected_tests):
if test != '':
Test.objects.filter(id__in=request.POST.getlist('items')).delete()
return HttpResponseRedirect('/test-management/test/')test_list.html
</button>
<button class="btn btn-round delete-btn" data-toggle="modal">
<i class="material-icons" action >delete</i> Delete
</button>
<div class="table-container">
<table id="fresh-table" class="table table-striped test-list">
<thead class="thead-table-list">
<tr>
<th scope="col">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" id="checkall" type="checkbox" value="">
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
</th>
<th scope="col">#</th>
<th scope="col">Test</th>
<th scope="col">Type</th>
<th scope="col">Test Date</th>
</tr>
</thead>
<tbody>
{% for test in tests %}
<tr data-id="{{ test.id }}">
<td>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input check-ele" type="checkbox" value="">
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
</td>
<td>{{ test.id}}</td>
<td>{{ test.test_name}}</td>
<td>{{ test.test_type}}</td>
<td>{{ test.test_date}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<script type='text/javascript'>
$(".delete-btn").click(function(){
var selected_rows=[];
$('.test-list').find('tr').each(function(){
var row=$(this);
console.log(row.find('input[type="checkbox"]').is(':checked'));
if (row.find('input[type="checkbox"]').is(':checked')) {
console.log(row.attr('data-id'));
selected_rows.push(row.attr('data-id'));
};
});
var selected_rows = JSON.stringify(selected_rows);
$.ajax({
url: "{% url 'delete_test' %}",
type: 'POST',
data: {'test_list_ids': selected_rows},
})
});
</script>发布于 2018-06-25 09:22:50
您需要传递一个csrfmiddlewaretoken和POST数据。您可以通过包含模板标记{% csrf_token %}来实现这一点。
</button>
<button class="btn btn-round delete-btn" data-toggle="modal">
<i class="material-icons" action >delete</i> Delete
</button>
<div class="table-container">
<table id="fresh-table" class="table table-striped test-list">
<thead class="thead-table-list">
<tr>
<th scope="col">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" id="checkall" type="checkbox" value="">
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
</th>
<th scope="col">#</th>
<th scope="col">Test</th>
<th scope="col">Type</th>
<th scope="col">Test Date</th>
</tr>
</thead>
<tbody>
{% for test in tests %}
<tr data-id="{{ test.id }}">
<td>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input check-ele" type="checkbox" value="">
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
</td>
<td>{{ test.id}}</td>
<td>{{ test.test_name}}</td>
<td>{{ test.test_type}}</td>
<td>{{ test.test_date}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% csrf_token %}
</div>
<script type='text/javascript'>
$(".delete-btn").click(function(){
var selected_rows=[];
$('.test-list').find('tr').each(function(){
var row=$(this);
console.log(row.find('input[type="checkbox"]').is(':checked'));
if (row.find('input[type="checkbox"]').is(':checked')) {
console.log(row.attr('data-id'));
selected_rows.push(row.attr('data-id'));
};
});
var selected_rows = JSON.stringify(selected_rows);
$.ajax({
url: "{% url 'delete_test' %}",
type: 'POST',
data: {'test_list_ids': selected_rows,'csrfmiddlewaretoken': $("[name=csrfmiddlewaretoken]").val()},
})
});
</script>发布于 2018-06-25 09:42:50
该错误通过传递csrfmiddlewaretoken和POST数据来解决。您可以通过包括模板标记{% csrf_token %}来实现这一点。
$.ajax({
url: "{% url 'delete_test' %}",
type: 'POST',
data: {'test_list_ids': selected_rows,'csrfmiddlewaretoken': $("[name=csrfmiddlewaretoken]").val()},
})在选中行的复选框并单击“删除”按钮时,我还可以删除模型的对象:
views.py
def delete_test(request):
if request.is_ajax():
selected_tests = request.POST['test_list_ids']
selected_tests = json.loads(selected_tests)
for i, test in enumerate(selected_tests):
if test != '':
Test.objects.filter(id__in=selected_tests).delete()
return HttpResponseRedirect('/test-management/test/')谢谢!
https://stackoverflow.com/questions/51019289
复制相似问题