Django:从数据库导出对象到Excel

我在我的模板中有这个:

<table> <tr><td>book_id</td><td>book name</td><td>book_author</td></tr> {% for book in books %} <tr><td>{{ book.book_id }}</td><td>{{ book.book_name }}</td><td>{{ book.book_author }}</td></tr> {% endfor %} </table> <a href="/export">Export to Excel !</a> 

我的看法似乎是这样的:

 def export_excel(request): books = Book.objects.all() response = HttpResponse(books , content_type='application/vnd.ms-excel;charset=utf-8') response['Content-Disposition'] = 'attachment; filename="books.xls"' return response 

这里是urls.py mu url:

 url(r'^export$', 'export_excel', name='export_excel'), 

它将文件导出到名为books.xls的文件中,这里的问题是将它们导出为第一个方格(A1)中的“书籍对象”

如果我想将每个“book_attribute”在单独的方块和每个“书”中分开放置,我应该怎么做?

您正在发送一个名为“books.xls”的东西,并正确表明这是一个Excel电子表格…但事实并非如此。 你完全错过了实际创build一个包含你的数据的Excel电子表格的步骤(这可能是这里工作的80%)。

尝试在网上search如何在Python中创build一个Excel电子表格。

工作示例使用tablib,一个出色的表格数据库库。

  from django.http import HttpResponse import tablib headers = ('Book', 'Author') data = [] data = tablib.Dataset(*data, headers=headers) books = Book.objects.all() for book in books: data.append((book.book_name, book.author)) response = HttpResponse(data.xls, content_type='application/vnd.ms-excel;charset=utf-8') response['Content-Disposition'] = "attachment; filename=export.xls" return response 

我认为问题在于你只是简单地将一个Book对象列表传递给你的导出文件。

 books = Book.objects.all() 

这一行只是返回一个对象列表。

我想你可能想迭代Book对象的每个属性。 用显示所有字段的元组replace每个书对象。 困难的办法是做一些像books_list = map(lambda x:(x.book_id,x.book_name,… Book的所有字段),books)

你通过books_list来导出文件,而不是书籍。

 def export_excel(request): books = Book.objects.all() response = HttpResponse(books , content_type='application/vnd.ms-excel;charset=utf-8') response['Content-Disposition'] = 'attachment; filename="books.xls"' writer = csv.writer(response) writer.writerow(['Book', 'Author']) for book in books: writer.writerow([book.book_name, book.author]) return response 

一个解决scheme使用我的插件: django_excel

 import djang_excel as excel import pyexcel.ext.xls # in order to handle 'xls' format # import pyexcel.ext.xlsx # in order to handle 'xlsx' format # import pyexcel.ext.ods # in order to handle 'ods' format def export_excel(self, request): # Book as django model, 'xls' as file format response = excel.make_response_from_a_table(Book, 'xls') response['Content-Disposition'] = 'attachment; filename="books.xls"' return response