2017-01-18 4 views
0

Я хочу создать дополнительное действие для администратора в django-admin.Экспорт модели объектов Django в CSV

Я хочу, чтобы иметь возможность экспортировать данные в формате CSV.

Я написал следующий код в моем admin.py:

from django.contrib import admin 
from .models import News, ResourceTopic, Resource, PracticeTopic, Practice, Contacts, Visualization 
import csv 
from django.utils.encoding import smart_str 
from django.http import HttpResponse 
admin.site.register(News) 
admin.site.register(ResourceTopic) 
admin.site.register(Resource) 
admin.site.register(PracticeTopic) 
admin.site.register(Practice) 
admin.site.register(Visualization) 


def export_csv(modeladmin, request, queryset): 
    response = HttpResponse(content_type='text/csv') 
    response['Content-Disposition'] = 'attachment;  filename="somefilename.csv"' 
    writer = csv.writer(response) 
    writer.writerow([ 
     "First Name", 
     "Last Name", 
     "Organization", 
     "City", 
     "Country", 
     "Email", 
    ]) 
    for obj in queryset: 
     writer.writerow([ 
      obj.firstName, 
      obj.lastName, 
      obj.organization, 
      obj.city, 
      obj.country, 
      obj.email, 
     ]) 
    return response 

class contactsAdmin(admin.ModelAdmin): 
    actions = [export_csv] 

admin.site.register(Contacts, contactsAdmin) 

У меня есть проблема: файл получает загружен как download.html И HTML-файл отображает ту же страницу Джанго администратора.

enter image description here enter image description here

+0

Попробуйте изменить '' content_type' в mime_type' как это https://gist.github.com/mgerring/3645889 –

ответ

0

Я делаю это наоборот:

 f = open(file_path, 'wb') 
     writer = csv.writer(f) 

     #write stuff 

     response = HttpResponse(f, content_type='text/csv') 
     response['Content-Disposition'] = 'attachment; filename.csv' 
     return response 
+0

В основном, мне понравилось, что вы сказали, но я открыл файл в памяти, используя f = StringIO(), и он сработал. – prb977

Смежные вопросы