尝试将数据从数据库导出到Django中的Excel [英] Trying to export data from database to excel in django

查看:93
本文介绍了尝试将数据从数据库导出到Django中的Excel的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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,然后从数据库中相应地导出数据.一切正常,直到下面这一行.

What I am trying to do is pass several ids from the front end to the back and then export data from the database accordingly. everything is working fine till this following line.

dataset = Case_Detail.export(queryset)

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

after this line, it again reaches to the beginning of the function that results in the blank list that results in an empty excel file

推荐答案

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

So, finally, I have achieved what I want.

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

I want to pass selected id's (multiple ids) from the frontend to the backend, and then fetch data from the database accordingly. After that, I want to export the data into excel or CSV format.

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]*=((['"]).*?\2|[^;\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传递的文件

Person.csv is the file I am passing through 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文件.

If your dataset replays an empty list please check the console of developer tab for error in js file you included in the document, and make sure that you do not include any js file twice in the same file.

感谢所有帮助过我的人

这篇关于尝试将数据从数据库导出到Django中的Excel的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆