【问题标题】:How to perform .delete() queryset in Django in a ListView?如何在 ListView 中的 Django 中执行 .delete() 查询集?
【发布时间】:2018-02-19 08:13:39
【问题描述】:

这是我到目前为止所做的:

1.) 我制作了一个 javascript 函数,它可以像这样(这是 DataTables)在数据库中获取所有项目的 id(使用复选框选择):

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 的内容。

2.) 在 &lt;input type="hidden"&gt; 中传递值。

现在,我已经阅读了post that says you can delete data in Django database using a checkbox,,但我不确定我该如何使用它。

我猜我应该把它放在我制作的ListView中,但是当我点击“删除所选项目”按钮时,我该怎么做,我可以关注this answer?

我正在尝试实现删除项目时 Django Admin 的样子。

我的 ListView 如下所示:

【问题讨论】:

    标签: javascript django datatables django-class-based-views


    【解决方案1】:

    是的,您可以使用链接示例。 Django Admin 以同样的方式执行此操作,您发送选定的 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>
    

    【讨论】:

    • 我应该怎么做?你能教我一个循序渐进的例子吗?如上所示,我正在使用基于类的 ListView 和 DataTables 按钮功能。
    • @Kenny 查看更新的答案。我附上了简单的例子。
    • 非常感谢!这是很大的帮助。截至目前,我正在根据我的结构编辑您的代码。希望我能让它工作。等一下.. 再次感谢您!
    猜你喜欢
    • 2011-09-27
    • 2015-09-25
    • 1970-01-01
    • 2018-11-18
    • 2018-09-23
    • 2021-06-14
    • 2019-06-08
    • 2010-10-15
    相关资源
    最近更新 更多