如何在 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>