-
06. 관리자 페이지 커스터마이징_BASICold/디비설with장고 2018. 7. 16. 21:42728x90
"
makemigrations
: models.py에서 적용한 변경사항이나 추가된 혹은 삭제된 사항들을 감지하여 파일로 생성migrate
: 적용되지 않은 migrations들을(설정값들을) 적용시키는 역할
즉,
makimigrations
는 장고에서 제공하는 모델의 변경사항들을 감지하고 기록하는 역할을 하며migrate
는 그러한 기록된 파일들과 설정값들을 읽어서 그 변경사항을 db에 저장하는 역할을 한다.출처: https://twpower.github.io/23-difference-between-makemigrations-and-migrade-in-django
"
01. Intro
장고에서 생성해주는 관리자 페이지를 커스터마이징 하는 방법을 알아볼것이다. 아예 다른 페이지를 생성해도 되지만 인터넷에서 참고자료를 찾아서 커스터마이징을 하는 방법을 알아냈는데 꽤나 유용했다.
참고한 슬라이드는 https://www.slideshare.net/bbayoung7849/djangoadminsitecustomexample 이고
이 슬라이드에서 사용한 코드는 이분의 깃헙에 올라가있다.
깃헙 주소: https://github.com/bbayoung/django-admin-site-custom-example
이 분의 슬라이드를 참고하여서 커스터마이징 하는 방법을 알아보도록 하겠다.
02. 커스터마이징 하기전에 알아야 할것들
장고는 데이터베이스의 테이블들을 객체로 다룬다. 그리고 이런 객체들을 여러개의 앱에서 불러와서 다룬다. 뒤에서 수정할수도 있겠지만 일단 우리가 만드려는 페이지의 구조를 설명하겠다.
장고에서 앱을 나누는 기준은 사람마다 다르고 나도 아직 잘 모르기때문에 어떻게해야 앱을 잘 구성할 수 있는지는 모른다. 그래서 일단은 느낌있게, 결제하는 부분과 상영일정을 등록하는 앱으로 두개를 나누기로 했다.
1) 결제하는 부분을 담당하는 paythings
2) 상영일정을 관리하는 schedule
앱으로 구성할 것이다.
그리고 각각의 앱에서는 앞 포스팅에서 만들었던 테이블을 불러와서 관리할 수 있는데 우리는
1) paythings: Snack, SnackOrder, Pay, Souvnenir, SouvOrder, Customer, Ticket
2) schedule: Movie, ScreenSchd, Seat, Theater
(Souvnenir은 오타...ㅠ)
를 관리할 것이다.
이제 아래에서부터 각각을 어떻게 관리자 페이지에서 볼수 있게 하는지에대한 내용을 다룰 것이다.
03. 모델 Basic!
- 처음 관리자 페이지를 가면 아무것도 없다.
- 그러면 먼저 app을 두개 만들어 보도록 하겠다. django 앱을 선택하고
- paythings와 schedule이라는 앱을 각각 만들어준다
- 둘다 만들고 나면 아래처럼 뜬다
- 이제 이러고나면 우리가 데이터 베이스에 만들어둔 테이블을 장고내에 개체로 불러와야한다. 뭔소린지 몰라도 일단 해보면 알수있다.
- 탐색기에서 dir명령어로 폴더내에 어떤 파일들이 있는지 확인해보면 env도 있다는 것을 알수있다. env 폴더내에 가상환경을 활성화 시킬수 있는 뭔가가 있는데 이놈을 실행시켜줘야한다.
- 아래명령어로 활성화 시킬수있다.(env는 각자가 만든 가상환경의 이름이다.)
-그리고나서 python manage.py inspectdb > app\models.py를 하면 app이라는 이름의 앱안의 models.py에 우리가 만든 테이블들이 불러와져있다.
- 짜잔! 하지만 여기서 대부분은 다 쓸데 없고 이중에
1) paythings: Snack, SnackOrder, Pay, Souvnenir, SouvOrder, Customer, Ticket
2) schedule: Movie, ScreenSchd, Seat, Theater
를 각각의 앱내의 models.py로 옮겨준다.
- 이건 schedule앱안의 models.py
- 이건 paythings앱안의 models.py
- 위에건 그냥 그 앱 내에서 저런 테이블들을 관리하겠다고 불러온거고, 저거한다고 admin 페이지에서 뭔가 보이는건아니다. 각각의 앱안에 보면 admin.py라는 파일이 있는데 여기서 뭔가 해줘야한다.
- 이렇게 각각의 admin.py에서 어드민 페이지에서 관리하고 싶은 테이블들을
from .models import 테이블이름
이런 형식으로 불러와서 등록할 수 있다. 우리는 아직 뭘잘 모르기때문에 모든 테이블들을 관리자 페이지에서 관리할 수 있도록 모두 등록했다.
- 여기도 똑같이!
- 이러고 나면 settings.py에서 우리가 앱을 만들었다! 이렇게 써줘야한다. 안써도 별일 없던거같은데 써야하더라.
- 근데 실행하면 에러남;; 왜냐하면 내가 erwin에서 스크립트를 잘못생성해서 primary 키를 설정하지 않았기 때문이다.
- 하지만 문제 없다. 우리의 sql developer는 편집 버튼을 누르면
- 여기에서 누르기만 하면 primary key를 설정할 수 있다.
- 이러고 나면
이걸 다시 한번 해서 app으로 불러와야한다. app처럼 딱히 사용하지 않는 앱을 이용해서 테이블에서 생긴 변경사항을 inspecdb명령어를 통해서 쉽게 불러 올수 있다.
- 짜잔!
04. 마무리하며
사실 위의 스크립트는 foreign key 도 제대로 생성이 안되서 외래키 설정을 해주어야한다. 이럴때 sql 문 작성 연습을 하는 것 아닐까!
여기를 참고해서 외래키를 제대로 설정해주고
ALTER TABLE SNACKORDER
ADD CONSTRAINT FK_SNACKORDER FOREIGN KEY(PAYNO)
REFERENCES PAY(PAYNO);
ALTER TABLE SNACKORDER
ADD CONSTRAINT FK_SNACKORDER2 FOREIGN KEY(SNACKNO)
REFERENCES SNACK(SNACKNO);
이런식으로 수정해주면 된다.
이렇게 하면 외래키 제약조건도 추가할 수 있다!
ALTER TABLE SOUVORDER
ADD CONSTRAINT FK_SOUVORDER FOREIGN KEY(PAYNO)
REFERENCES PAY(PAYNO);
ALTER TABLE SOUVORDER
ADD CONSTRAINT FK_SOUVORDER2 FOREIGN KEY(SOUVNO)
REFERENCES SOUVNENIR(SOUVNO);
ALTER TABLE PAY
ADD CONSTRAINT FK_PAY FOREIGN KEY(CUSTONO)
REFERENCES CUSTOMER(CUSTONO);
ALTER TABLE TICKET
ADD CONSTRAINT FK_TICKET FOREIGN KEY(PAYNO)
REFERENCES PAY(PAYNO);
ALTER TABLE TICKET
ADD CONSTRAINT FK_TICKET2 FOREIGN KEY(SEATNO)
REFERENCES SEAT(SEATNO);
ALTER TABLE SCREENSCHD
ADD CONSTRAINT FK_SCREENSCHD FOREIGN KEY(MOVIENO)
REFERENCES MOVIE(MOVIENO);
ALTER TABLE SCREENSCHD
ADD CONSTRAINT FK_SCREENSCHD2 FOREIGN KEY(THEATERNO)
REFERENCES THEATER(THEATERNO);
'old > 디비설with장고' 카테고리의 다른 글
08. 사용자 페이지 구성방법(Url편) (0) 2018.07.18 07. 관리자 페이지 커스터 마이징 하기(심화) (0) 2018.07.18 05. ERD 생성하고 오라클에 테이블 생성하기 (0) 2018.07.01 04. 장고와 오라클 연동하기(AWS RDS 편) (0) 2018.07.01 03. 장고와 오라클 연동하기(Local 편) (0) 2018.06.30