본문 바로가기
Programming

[개발] Django CSV 내보내기 액션 추가

by BTC-큰뉴진 2023. 12. 11.

베하~! 뉴진쓰팀의 큰뉴진입니다.

이번에는 Django에서 CSV 내보내기 액션에 대해서 다뤄보려고 해요.

 

먼저 관리자 페이지가 준비되어 있어야 해요.

 

 

 

저는 Exports 라는 모델을 만들어서 그 안에서 액션을 추가했어요.

 

admin.py에서 

import csv
from django.http import HttpResponse

from .models import Export

 

csv와 HttpResponse, 모델을 import 해줍니다.

 

마찬가지로 admin.py에서 csv 액션을 추가해줍니다.

HttpResponse를 사용하면 csv로 컨텐츠 타입을 지정할 수 있어요.

@admin.action(description='CSV로 내보내기')
def export_as_csv(self, request, queryset):
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="mydata.csv"'
    writer = csv.writer(response)
    # CSV 파일 헤더 작성
    writer.writerow(['Header1', 'Header2', 'Header3'])
    # 쿼리셋의 데이터를 CSV로 작성
    for obj in queryset:
        writer.writerow([obj.field1, obj.field2, obj.field3])
    return response

 

Header와 obj.field에 대해서 헷갈릴 수도 있는데요, 실제 액션을 하면서 보여드릴게요.

 

admin.py에서 class와 실제로 보일 수 있도록 register 해줍니다.

class ExportAdmin(admin.ModelAdmin):
    list_display = ['field1', 'field2', 'field3']
    actions = [export_as_csv]
    
    
admin.site.register(Export, ExportAdmin)

 

변경사항이 생기면 db를 업데이트 하구요. 서버를 실행합니다.

python manage.py makemigrations
python manage.py migrate

python.exe .\manage.py runserver

 

 admin페이지의 export로 들어가면 아래와 같은 화면이 있습니다.

(구성은 summernote를 사용했습니다.)

 

액션에서 CSV 내보내기가 생긴것을 확인할 수 있습니다.

 

display에 나왔던 field 1 2 3으로 정렬되고 export 추가시에 값을 넣을 수 있습니다.

 

모두 선택하고 csv로 내보내기를 해보겠습니다.

 

선언한 것 처럼 mydata.csv라는 파일을 생성합니다.

 

 

다운로드시에는 Field가 아닌 Header로 정렬됩니다.

이 데이터는 일치시킬 수도 있고 커스터마이징 할 수도 있으니 수정이 필요하다면 변경해서 사용해보면 좋을 것 같습니다.


이번에는 간단하게 CSV 내보내기를 구현해봤는데요, 다른 기능들도 차근차근 설명해보는 시간을 가지면 좋을 것 같아요.

 

뉴진쓰팀의 큰뉴진이었습니다~!

'Programming' 카테고리의 다른 글

[MyBatis] Collection과 Association  (0) 2023.12.22
Spring boot API ExceptionHandler  (0) 2023.12.22
[BigData] VectorDB에 대하여  (1) 2023.12.08
백엔드 응답모델(result) 구성하기  (2) 2023.12.08
[Vue] Vue.js LifeCycle  (0) 2023.12.07

댓글