본문 바로가기
django

2020.09.14_django_Admin import, export

by 해맑은 코린이 2020. 9. 15.

2020.09.14_django_Admin import, export_정리노트

 

 

오늘은 관리자 Admin에서 데이터를 다양한 파일 형식으로 가져오고 내보낼 수 있는 기능 정리 노트!! 

 

 이 기능을 통해 Excel, CSV, JSON 등 다양한 파일 형태를 불러올 수 있고, 또 이러한 파일 형식으로 내보낼 수 있다! 대표적으로 엑셀을 많이 쓰는듯 

 

ㄱㄱ

 

 

 

pip install django-import-export

먼저 이 프로그램을 설치를 해주고, 

 

 

 

 

 

설치를 했으니 settings.py 에서 설치했다고 알려줘야한다!!!!!!!! 그러니 INSTALLED_APPS 에 가서 적어주자.

 

 

 

 

 

 

그리고 collectstatic을 해야하는데, 우리가 저번 포스팅에서 설명했던 것처럼, collectstatic을 하게 되면, 우리가 앱별로 흩어져서 쓴 static 파일들을 static_root 를 통해 모아준다고 했었다. 개발 단계에서는 로컬 서버가 자동으로 모아서 보여준다고 했지만, 여기서는 모아주는 용도로 쓰는게 아닌, static 파일을 한 곳에 다운로드 해주는 개념으로 생각하면 될 것 같다.

 

 

 

 

 

쿄쿄 그러면 media 파일 처럼 static 폴더가 생성되어 우리가 써줬던 static 파일들이 모이게 된다. 

 

 

이제 admin.py 로 들어가서 우리가 쓰는 기능들을 상속해주면 된다. admin.py ㄱㄱ

 

이렇게 상속을 해주는데, 여기서 헷갈렸던 부분은 아무래도 내가 아직 class 라는 것에 대해서 잘 알지 못해서 기존 써왔던 것과 합치는 방법 자체를 잘 몰랐는데, 몇 개를 찾아보고 조금 알아가는 단계...라면

 

class 를 쓰고 class 이름을 써주고 ( 상속 받을 것 ) 들을 이렇게 써주고, 

 

admin.site.register(Post, PostAdmin) 은 저번에 했던 내가 사용했던 모델과, 모델의 admin을 등록해준 용도이다. 

admin.site.unregister 을 통해 기본 유저 모델의 등록을 해제하는 용도로 쓸 수 있다.

 

 

여기서 내가 헤매서 힘들었던 다중 상속 부분 조금 정리.

 

원래의 기능 두개는 형태가 다르다. 먼저 써머노트는 내가 저번에 적었던 것처럼,

 

 

 

이렇게 summernote모델어드민을 상속 받아주고, 필드에 content 의 부분에서만 summernote를 써주기 옵션을 지정해주었다. 

 

 

 

그리고 import_export는 

 

 

 

이렇게 모델어드민을 상속받고, mixin을 상속받게 해놨다. 우리가 이 상속들을 한 class에 합쳐서 상속을 받을 건데, 순서에 따라 코드는 전혀 달라진다.

 

 

이 개념은 MRO ( 매서드 탐색 순서 ) 의 개념으로 , 파이썬 클래스 다중 상속 개념이다.

 

여기서는 Mixin을 먼저 상속받아와준 순서인데, 파이썬은 왼쪽부터 먼저 읽게 된다.

 

클래스이름.mro() 또는 클래스이름. __mro__를 통해 현재 상속 받은 매서드의 탐색 순서를 알 수 있다고 한다. 

 

또한 상속 순서를 정확히 적지 않는다면 ( 또한 여러 가지의 경우의 순서가 나올 수 있게 코드를 작성하면, )

 

실행할 때마다 결과가 달라지는 다이아몬드 상속을 일으키게 된다. 그래서 이 코드는 좋지 못해 죽음의 다이아몬드라고 부른다고 함...ㅎㅁㅎ... 

 

쩃든 우리가 이러한 상속은 나에게는 아직 어려운 개념이라 솔직히 완벽하게 이해는 못했다. met 이나 클래스안에서 다른 함수를 적어주거나 여러가지 옵션이 붙을 때 순서가 그렇게..어렵더라고,,,헣홓헣,,,,

 

또한 장고에서 쓰는 modeladmin 이나 mixin은 더욱더 어려운 개념으로 들어가기에.... 오늘은 그냥 순서를 기억해주는 정도로만 포스팅하고... 언젠가눈...또 알 수 있지 않을까하며 오늘의 포인트는 상속의 순서는 중요하다 정도로만 기억하고 넘어가야겠다..!

 

 

쨋든 만약 둘의 코드를 같이 합쳐서 한 클래스 안에 다중으로 상속을 받게 해줄 건데,

 

 

 

 

 

이 순서로 적어주게 된다면?

 

 

 

이렇게 MRO 오류를 띄워주게 된다. 여기서 object가 들어가 있는 이유는, 모든 클래스의 최상위 클래스는 object라고 파이썬의 문법이다. 

 

쨋든 지금 순서가 틀렸다. 또한 우리가 지금 modeladmin을 써머노트와 모델어드민 두개를 써주었기 때문에, 오류가 났다.

 

그래서 modeladmin을 하나만 써주자. 우리는 summernote를 쓸거니까 summernoteadmin 하나만 써주도록 하자!

 

 

 

 

 

 

또 modeladmin을 앞에 써주게 되면, 서버는 잘돌아가지만 admin page로 가게 되면, 

 

 

 

 

 

summernotemodeladmin이 먼저 실행되어 summernote는 작동이 잘되지만, 

 

 

 

 

 

상속받는 순서가 틀려서 import, export 가 작동 되지 않는다. 

 

 

...휴ㅠㅠㅠ 이렇게 순서와 상속받는 것들이 참 중요... 자 이래서 최종적으로는,

 

 

 

 

 

이렇게 써주게 되면,

 

 

 

 

 

 

이렇게 두가지 기능 전부 잘 작동 되는 것을 볼 수 있다!

 

 

휴ㅠㅠ 오늘은 models.Model 과 같은 느낌으로 modeladmin은 mixin보다 나중에 적어준다는 순서만 기억하고 넘어가자!!!!!

 

 

 

이렇게 정상적으로 다 관리자 페이지에 잘들어갔다면,

 

한번 시험해봐야디

 

 

 

 

이렇게 export를 들어가서 원하는 파일의 형태를 누르고 submit 해보게씀

 

 

 

 

 

 

갸악 대박 신기하다 이렇게 나는 엑셀로 해보았다

 

 

 

 

 

 

대박.........캬 이렇게 엑셀의 형태로 데이터 테이블이 만들어진다. 마찬가지로 import는 이렇게 작성해주게 되면 내 데이터 테이블에 그대로 데이터가 들어가게 되겠지!!!!!!!

 

 

 

오늘은 이렇게 우다타타타아아탕 django admin import export 기능 정리 끝! 포스팅 끝 탕탕

'django' 카테고리의 다른 글

2020.09.17_django_댓글 구현  (0) 2020.09.17
2020.09.15_django_관계 표현 modelfield  (0) 2020.09.16
2020.09.08_django_category 나누기  (2) 2020.09.09
2020.09.02_django_template 상속  (0) 2020.09.03
2020.09.01_django_makemigrations,migrate  (2) 2020.09.02

댓글