티스토리 뷰
장고에서는 기본적으로 제공해주는 어드민이 있다.
처음에 봤을땐 그냥 데이터베이스 직접 보는거랑 이게 뭔 차이인가.. 하는 생각을 했었는데, 문서(Django Document link)를 읽어보니 제법 기능이 많았다.
간편하게 커스터마이징하기 쉬운 것은 아래와 같다.
- list_display
- 말 그대로 모델어드민의 리스트 상에서 어떤 목록이 보여질지를 정하는 것이다. 해당 모델의 컬럼 중에서 리스트 상에서 보여줄 컬럼을 정할 수 있다
- list_display_links
- 리스트 상에서 해당 객체의 수정 페이지로 이동하는 링크를 어떤 컬럼에 걸지 정한다. 당연히 여기에서 지정하는 필드는 list_display에도 있어야 한다.
- list_filter
- 오른쪽 사이드바에 필터를 활성화하고, 어떤 컬럼값으로 필터링할지 정한다.
- search_fields
- 검색시 검색 가능한 필드 종류를 정한다. foreign key도 <model>__<FK>_<FK field>의 형태로 추가한 후 검색할 수 있다.
그리고 actions가 있다. (링크)
기본적으로 객체를 삭제하는 액션이 하나있고, 함수 지정 등을 통해서 새로운 액션을 추가할 수 있다.
나의 경우에는 리스트 상에서 id가 같은 파일을 여러 개 선택해서 zip파일로 다운받고 싶다는 요청이 들어와 관련 액션을 추가했다.
해당 액션명은 download_files 이고, 관련 함수는 아래와 같이 작성했다.
def download_files(modeladmin, request, queryset):
import os, requests, shutil, zipfile
from django.conf import settings
from django.http import HttpResponse, HttpResponseServerError
try:
id = str(queryset.first().id())
file_path = settings.MEDIA_ROOT
if not os.path.exists(file_path):
os.makedirs(file_path)
for obj in queryset:
req = requests.get(obj.file.url, allow_redirects=True)
open(f'{file_path}/', 'wb').write(req.content)
shutil.make_archive(f'{settings.MEDIA_ROOT}/', 'zip', file_path)
zip_path = os.path.join(settings.MEDIA_ROOT, f'{id}.zip')
response = HttpResponse(open(zip_path, 'rb'), content_type='application/zip')
response['Content-Disposition'] = f'attachment; filename={id}.zip'
shutil.rmtree(file_path)
os.remove(zip_path)
return response
except Exception as e:
return HttpResponseServerError(str(e))
download_files.short_description = "선택된 파일들을 모두 다운로드"
이후 해당 모델의 actions에 해당 함수를 추가했고 작동하는 것을 확인할 수 있었다!
반응형
'Programming > Django' 카테고리의 다른 글
장고에서 로깅하기 (Django Logging) (0) | 2021.05.13 |
---|---|
Django로 메일 보내기 (0) | 2021.05.12 |
Cannot force both insert and updating in model saving 에러 (0) | 2021.03.12 |
Models - ORM, Fields, Queryset, Migrations (0) | 2021.02.12 |
dispatch & decorator를 사용해서 유저 검사하기 (0) | 2020.11.18 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 다시미분적분
- 싱가포르
- 혼자공부하는얄팍한코딩지식
- 파고다갓생후기챌린지
- 나는리뷰어다
- askcompany
- Docker
- django
- 나는리뷰어다2022
- 그래프QL인액션
- 싱가폴
- 리액트와함께장고시작하기
- udemy
- BookDiscussion
- 한빛출판사
- 파고다후기
- Python
- 길벗출판사
- Singapore
- 파고다강남후기
- 머신러닝파워드애플리케이션
- 한빛미디어
- SRE를위한시스템설계와구축
- 싱가폴여행
- SQL기초구문
- 해외여행
- 동남아
- 아토믹코틀린
- 유데미강의
- 개발자리뷰어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함