如何在 ListView 的 Django 中执行 .delete() 查询集?
How to perform .delete() queryset in Django in a ListView?
这是我到目前为止所做的:
1.) 我做了一个 javascript 函数来获取数据库中项目的所有 ID(使用复选框 select),就像这样(这是 DataTables):
function () {
// count check used for checking selected items.
var count = table.rows( { selected: true } ).count();
// Count check.
// Count must be greater than 0 to delete an item.
// if count <= 0, delete functionality won't continue.
if (count > 0) {
var data = table.rows( { selected: true } ).data();
var list = [];
for (var i=0; i < data.length ;i++){
// alert(data[i][2]);
list.push(data[i][2]);
}
var sData = list.join();
// alert(sData)
document.getElementById('delete_items_list').value = sData;
}
}
它输出类似 1,2,5,7
的内容,具体取决于我 select 编辑的行。
2.) 传递了 <input type="hidden">
.
中的值
现在,我已经阅读了 post that says you can delete data in Django database using a checkbox,,但我不确定我该如何使用它。
我想我应该把它放在我制作的ListView中,但是当我点击"Delete selected items"按钮时,我怎么能这样做,我可以跟随this answer?
我正在尝试实现删除项目时 Django Admin 的样子。
我的 ListView 如下所示:
是的,您可以使用链接示例。 Django 管理员以相同的方式执行此操作,您发送选定的 ID,然后 Django 按给定值进行过滤,然后在 Django 对选定的项目应用选定的操作后。
更新
例如
class List(ListView);
def post(self, request, *args, **kwargs):
ids = self.request.POST.get('ids', "")
# ids if string like "1,2,3,4"
ids = ids.split(",")
try:
# Check ids are valid numbers
ids = map(int, ids)
except ValueError as e:
return JsonResponse(status=400)
# delete items
self.model.objects.filter(id__in=ids).delete()
return JsonResponse({"status": "ok"}, status=204)
和html:
<button id="delete-button">Del</button>
<div id="items-table">
{% for object in objects_list %}
<div class="item" data-id="{{object.id}}">{{ object.name }}</div>
{% endfor %}
</div>
<script>
$(function(){
$('#delete-button').on('click', function(e) {
// Get selected items. You should update it according to your template structure.
var ids = $.map($('#items-table item'), function(item) {
return $(item).data('id')
}).join(',');
$.ajax({
type: 'POST',
url: window.location.href ,
data: {'ids': ids},
success: function (res) {
// Update page
window.location.href = window.location.href;
},
error: function () {
// Display message or something else
}
});
})
})();
</script>
这是我到目前为止所做的:
1.) 我做了一个 javascript 函数来获取数据库中项目的所有 ID(使用复选框 select),就像这样(这是 DataTables):
function () {
// count check used for checking selected items.
var count = table.rows( { selected: true } ).count();
// Count check.
// Count must be greater than 0 to delete an item.
// if count <= 0, delete functionality won't continue.
if (count > 0) {
var data = table.rows( { selected: true } ).data();
var list = [];
for (var i=0; i < data.length ;i++){
// alert(data[i][2]);
list.push(data[i][2]);
}
var sData = list.join();
// alert(sData)
document.getElementById('delete_items_list').value = sData;
}
}
它输出类似 1,2,5,7
的内容,具体取决于我 select 编辑的行。
2.) 传递了 <input type="hidden">
.
现在,我已经阅读了 post that says you can delete data in Django database using a checkbox,,但我不确定我该如何使用它。
我想我应该把它放在我制作的ListView中,但是当我点击"Delete selected items"按钮时,我怎么能这样做,我可以跟随this answer?
我正在尝试实现删除项目时 Django Admin 的样子。
我的 ListView 如下所示:
是的,您可以使用链接示例。 Django 管理员以相同的方式执行此操作,您发送选定的 ID,然后 Django 按给定值进行过滤,然后在 Django 对选定的项目应用选定的操作后。
更新
例如
class List(ListView);
def post(self, request, *args, **kwargs):
ids = self.request.POST.get('ids', "")
# ids if string like "1,2,3,4"
ids = ids.split(",")
try:
# Check ids are valid numbers
ids = map(int, ids)
except ValueError as e:
return JsonResponse(status=400)
# delete items
self.model.objects.filter(id__in=ids).delete()
return JsonResponse({"status": "ok"}, status=204)
和html:
<button id="delete-button">Del</button>
<div id="items-table">
{% for object in objects_list %}
<div class="item" data-id="{{object.id}}">{{ object.name }}</div>
{% endfor %}
</div>
<script>
$(function(){
$('#delete-button').on('click', function(e) {
// Get selected items. You should update it according to your template structure.
var ids = $.map($('#items-table item'), function(item) {
return $(item).data('id')
}).join(',');
$.ajax({
type: 'POST',
url: window.location.href ,
data: {'ids': ids},
success: function (res) {
// Update page
window.location.href = window.location.href;
},
error: function () {
// Display message or something else
}
});
})
})();
</script>