2013-04-12 2 views
2

у меня есть это в моем шаблоне:Джанго: экспорт объект из базы данных, чтобы преуспеть

<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 

А вот мю URL в urls.py:

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

Он экспортирует книги в файл, названный books.xls, и проблема заключается в том, что он экспортирует их как «объекты книги» в первый квадрат (A1)

Что мне делать, если я хочу сделать каждую «book_attribute» в отдельном квадрате и каждой «книге» в отдельной строке?

ответ

0

Я думаю, проблема в том, что вы просто просто передаете список объектов книги в свой файл экспорта.

books = Book.objects.all() 

Эта строка просто возвращает список объектов.

Я думаю, что вы можете итерировать каждую собственность объекта Book. Заменить каждый объект книги кортежем со всем отображаемым полем. Трудный путь это сделать что-то вроде books_list = карта (лямбда-х: (x.book_id, x.book_name, .... все области книги), книги)

И вы передаете books_list экспортировать файл вместо книг.

6

Вы отправляете что-то под названием «books.xls» и правильно сигнализируете, что это электронная таблица Excel ... но это не так. Вы полностью пропустили шаг создания электронной таблицы Excel, содержащей ваши данные (это, вероятно, 80% работы здесь).

Попробуйте найти в Интернете, как создать таблицу Excel в Python.

0
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 
3

Рабочего пример с использованием 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 
0

Решение с помощью моего плагина: 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 
Смежные вопросы