Django_Model
1. Django_Model의 특징
- Django는 내장 ORM을 통해 sql문 작성 없이도 DB의 접근이 가능하다.
- Model은 DB와 연결되어있다.
- SQL문장 없이 장고 모델을 통해 DB의 CRUD가 가능하다 >> 모델 안의 Class가 DB의 테이블 역할
- DB는 myproject(base_dir)에 생성된다.
- 아래와 같이 상속을 받아야 Django의 ORM을 사용할 수 있다.
From django.db import models
Class Post(models.Model): #상속을 받아야 사용가능
2. Django_Model 생성
1> 모델에 class 생성
blog/models.py
- 여기서 생성 된 class 1개가 테이블 1개를 의미한다
- 변수이름 = models. 변수 타입 지정
- def __str__ : str을 재 정의 하는 것 : 사용자가 원하는 방식으로 테이블을 볼 수 있게 하는 것
2> 모델 생성
python manage.py makemigrations blog
- DB에 반영할 준비를 하는 단계
3> 생성된 SQL 문장 확인
python manage.py sqlmigrate blog
- blog뒤에 0001을 붙이면 특정 데이터 베이스를 지정해서 확인하는 것
- 안 해도 무관한 단계 : 자동으로 생성되는 sql문장을 확인
4> 데이터 베이스 생성
python manage.py migrate #처음에 한번은 꼭 실행해야함
python manage.py migrate blog #그 다음부터는 원하는 앱만 생성
- 첫 줄의 코드가 실행되어야 기본적으로 생성되야하는 파일이 생성된다(꼭 처음에 한 번은 실행시킨다)
5> 장고 안에 있는 shell 실행
python manage.py shell
- 장고 shell을 이용하여 실제 DB안의 데이터를 확인해볼 수 있다.
6> DB Browser for SQLite
- DB Browser for SQLite로 들어가서 새 데이터 베이스 열기
- myproject에 새로 생성된 db.sqlite3 파일을 불러온다.
3. Django_Model 추가정보
# DB와 직접 커넥하는 곳
# DB를 저장하는 방법은 데이터베이스, 파일, 캐시서버 등이 있다.
# ORM 기법 : DB와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법
- 장고는 ORM을 내장하고 있기 때문에 자동으로 변환을 시켜준다.
# 장고가 제공하는 DB는 Mysql, oracle, Sqlite3등이 있다.
# Model 과 Form 둘다 ORM을 제공 : Form은 보통 html과 함꼐 쓰인다.
# 새로 생성한 테이블을 어드민에서도 관리하려면 blog/admin.py에 추가해줘야한다.
- 위 이미지에서 알 수 있는 것은 Post, Musician, Album이라는 테이블을 추가 해준 것
# DB에 적용 가능한 다양한 타입들
# 날짜 관련 데이터 타입 입력 시 주의사항
fDateField = models.DateField(auto_now=False, default=datetime.date.today)
fDateTimeField = models.DateTimeField(auto_now=False, auto_now_add=False)
- auto_now = True : 저장할 때 마다 현재 날짜로 수정된다. >> update
- auto_now = False : 현재 날짜로 한번만 저장되고 변경은 불가능
- auto_now_add = True : 현재일자로 1회만 들어간다. >> create
- auto_now_add = False : 선택된 일자로 1회만 들어간다
>>false로 지정하면 우리가 선택할 수 있는 UI가 어드민상에 생성된다. true로 지정하면 선택할 수 있는 공간이 없다.
# NULL & BLANK 관련 정보
- Null : DB와 관련해서 NULL값의 여부를 지정
- Blank : 유효성과 관련(사용자의 입장), 폼 유효성 검사에 사용된다 >> 사용자에게 빈칸을 허용할 지 말지에 관련.
4. Django_Model 1:N과 M:N
1> Foreign Key(to, on_delete)
- 1 : N 의 관계
- to : 대상 모델을 입력한다 (1의 역할)
- on_delete : cascade가 default 값이다
models.py
>> 정리하자면 1: N의 관계를 사용하고자 할 때는 Foreign Key를 사용한다 (이때 1을 인자로 넣어준다)
>> 여기서 1은 Reporter이고, N은 Artilcle이다.
2> ManyToManyField
- M : N 의 관계
- 이때는 중간 테이블이 자동으로 생성된다. (테이블이 M:N의 관계일 경우만)
- 아래의 이미지에서 Article이 Publication을 참조하기 때문에 Publication을 먼저 정의해야한다.
- 또한 Article이 Reporter를 참조하기 때문에 Reporter를 먼저 정의해야한다.
>> 중요한 사실은 다른 테이블을 참조하고자 한다면, 참조할 테이블이 사용할 테이블보다 위에 정의되어있어야 한다.
5. CUSTOMIZING DB FOR ADMIN
1> 로직을 추가해서 어드민에 등록 할 경우
admin.py
- 추가하고 싶은 로직을 수행하는 class 생성
- admin.site.resister(테이블이름, 수행할 로직의 클래스)
2> 사용자가 원하는 칼럼을 추가
- 기능을 새롭게 만들어서 추가 할 수 있다.
admin.py
- 기존에 생성한 class에 새롭게 추가 할 기능에대한 def 를 생성한다.
- 새롭게 함수를 추가하고 볼 수 있는 admin 환경