jquery - 尝试将数据从数据库导出到 django 中的 excel
问题描述
视图.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 格式。
阿贾克斯:
<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 传递的文件
视图.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 文件。
感谢所有帮助过我的人
推荐阅读
- reactjs - 动态附加组件
- python - 如何自定义列表的排序?
- flutter - Flutter 功能发现——BottomNavigationBarItems 的 DescribedFeatureOverlay
- r - 如何在 R 中复制具有特定扩展名或包含特定短语/模式的文件?
- python - 在数据库 SQLite3 中插入字典
- bash - 如何使用 sed 或 awk 在某些字符前后添加空格?
- javascript - JQuery - 在图像上绘制矩形
- gremlin - 有条件的 has()
- ruby - 如何分解创建子字符串方法
- typescript - TypeScript 说类型是“任何”,当它被显式设置为其他东西时