2017-01-18 1 views
0

django-admin에서 admin에 대한 추가 작업을 만들고 싶습니다.CSV로 Django 객체 모델 내보내기

데이터를 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) 

내가 가진 문제 : 파일이 HTML 파일이 같은 장고 관리자 페이지를 표시 인 download.html로 다운로드됩니다.

enter image description here enter image description here

+0

시도하면이 같은 mime_type''에'content_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