尝试将数据从数据库导出到 Django 中的 excel

Trying to export data from database to excel in django

views.py

def export(request):
    print('start')
    ourid = request.POST.getlist("terid")
    queryset = Case_Info.objects.filter(id__in=list(map(int, ourid)))
    Case_Detail = Case_Info_Resource()
    print(ourid)
    dataset = Case_Detail.export(queryset)  # error in this line
    response = HttpResponse(
        dataset.xls, content_type='application/vnd.ms-excel')
    response['Content-Disposition'] = 'attachment; filename="persons.xls"'
    print('end')
    return response

Ajax 脚本

$(document).ready(function () {
    $('#Download').click(function () {
        console.log("clicked!")
        var list = [];
        $("input:checkbox[name='checkbox']:checked").each(function () {
            list.push($(this).val());
        });
        $('#Download').attr('disabled', 'disabled');
        $.ajax({
            url: '/Account_Manager/Download/',
            type: 'POST',
            data: {
                'terid': list,
                'csrfmiddlewaretoken': '{{csrf_token}}',
            },
            timeout: 30000,
            traditional: true,
            dataType: 'text',
            success: function () {
                alert("The best cricketers are: " + list.join(", "));
                $('#Download').removeAttr('disabled');
            }
        });
    });
});

我想做的是从前端传几个id到后端,然后从数据库中导出相应的数据。一切正常,直到下一行。

dataset = Case_Detail.export(queryset)

在这一行之后,它再次到达导致空白列表的函数的开头,该空白列表导致空 excel 文件

所以,终于,我实现了我想要的。

我想将选定的id(多个id)从前端传递到后端,然后相应地从数据库中获取数据。之后,我想将数据导出为 excel 或 CSV 格式。

Ajax:

<script>

    $(document).ready(function (e) {
        $('#Download').click(function (e) {
            e.preventDefault()
            console.log("clicked!")
            var list = [];
            $("input:checkbox[name='checkbox']:checked").each(function () {
                list.push($(this).val());
            });
            $.ajax({
                url: '/Account_Manager/Download/',
                type: 'POST',
                data: {
                    'terid': list,
                    'csrfmiddlewaretoken': '{{csrf_token}}',
                },
                traditional: true,
                dataType: 'text',
                success: function (response, status, xhr) {
                    var filename = "persons.csv";
                    var disposition = xhr.getResponseHeader('Content-Disposition');
                    if (disposition && disposition.indexOf('attachment') !== -1) {
                        var filenameRegex = /filename[^;=\n]*=((['"]).*?|[^;\n]*)/;
                        var matches = filenameRegex.exec(disposition);
                        if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
                    }

                    var type = xhr.getResponseHeader('Content-Type');
                    var blob = new Blob([response], {type: type});

                    if (typeof window.navigator.msSaveBlob !== 'undefined') {
                        // IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
                        window.navigator.msSaveBlob(blob, filename);
                    } else {
                        var URL = window.URL || window.webkitURL;
                        var downloadUrl = URL.createObjectURL(blob);

                        if (filename) {
                            // use HTML5 a[download] attribute to specify filename
                            var a = document.createElement("a");
                            // safari doesn't support this yet
                            if (typeof a.download === 'undefined') {
                                window.location.href = downloadUrl;
                            } else {
                                a.href = downloadUrl;
                                a.download = filename;
                                document.body.appendChild(a);
                                a.click();
                            }
                        } else {
                            window.location.href = downloadUrl;
                        }

                        setTimeout(function () {
                            URL.revokeObjectURL(downloadUrl);
                        }, 100); // cleanup
                    }
                }
            });

        });
    });
</script>

Person.csv 是我正在通过的文件 views.py

View.py

def export(request):
    ourid = request.POST.getlist("terid")
    queryset = Case_Info.objects.filter(id__in=list(map(int, ourid)))
    dataset = Case_Info_Resource().export(queryset)
    response = HttpResponse(dataset.csv, content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="persons.csv"'
    return response

如果您的数据集重播一个空列表,请检查开发人员选项卡的控制台是否存在您包含在文档中的 js 文件中的错误,并确保您没有在同一文件中包含任何 js 文件两次。

感谢所有帮助过我的人