Django Model
1. Model이란:
- 데이터베이스에 접근하도록 도와주는 객체
-
장고내장 ORM이다.
-
ORM의 역할:
-
SQL을 직접 작성하지 않아도 장고 모델을 통해 데이터베이스로 접근한다.** **(조회/추가/수정/삭제)**
-
-
SQL을 직접 작성하지 않아도 되지만....! SQL을 몰라도 된다는 것은 아니다!** **최소한 내가 작성한 코드가 어떤 SQL을 만들어내는지는 검증할 수 있어야 한다.**
-
보통 하나의 장고 프로젝트에서 하나의 DB를 사용한다.**
-
파이썬 클래스와 데이터베이스 테이블을 매핑**
-
Model : DB테이블과 매핑
-
Model Instance : DB테이블의 1ROW
-
2. database란:
데이터베이스란 :
- 체계화된 데이터의 모임
- 여러 사람이 공유하여 사용할 목적으로 통합, 관리하는 데이터의 집합
엔티티(entity): 개체
- 테이블과 비슷한 의미
- 데이터베이스에 표현하려고 하는 유형, 무형의 객체로서 서로 구별되는 것
- 속성들을 가짐
릴레이션쉽(관계): 엔티티 사이의 관계
- 고객 <---> 장바구니
- 고객 <---> 예약
key(키):
- 행을 구별할 수 있는 최소 식별 단위(중복이 있으면 안됨)
- 불변의 값
foreign key(외래키):
- 다른 테이블과 관계를(릴레이션 쉽) 형성 할때 참조하는 키
**
3. Model 사용하기
class: == 하나의 테이블
위치 :특정앱 models.py
-
데이터베이스 테이블 구조/타입을 먼저 설계를 한 다음에 모델을 정의한다.**
-
데이터베이스 테이블 구조 설계**
-
모델을 정의
모델 클래스명은 단수형을 사용한다.**
-
Post( O ) // Posts( X )
Field: 테이블 안의 속성들
-
name, age, sal ...
지원하는 모델필드 타입
AutoField
BooleanField
CharField
TextField
DateTimeField
FileField
ImangeField
주요필드 옵션
# 필드옵션 : 필드마다 고유 옵션이 존재, 공통 적용 옵션도 있음
null # (DB 옵션) : DB 필드에 NULL 허용 여부 (디폴트 : False)
unique # (DB 옵션) : 유일성 여부 (디폴트 : False)
blank # : 입력값 유효성 (validation) 검사 시에 empty 값 허용 여부 (디폴트 : False)
default # : 디폴트 값 지정. 값이 지정되지 않았을 때 사용
verbose_name # : 필드 레이블. 지정되지 않으면 필드명이 쓰여짐
validators # : 입력값 유효성 검사를 수행할 함수를 다수 지정
# 각 필드마다 고유한 validators 들이 이미 등록되어있기도 함
# 예 : 이메일만 받기, 최대길이 제한, 최소길이 제한, 최대값 제한, 최소값 제한 등
choices # (form widget 용) : select box 소스로 사용
help_text # (form widget 용) : 필드 입력 도움말
auto_now_add # : Bool, True 인 경우, 레코드 생성시 현재 시간으로 자동 저장
모델 등록절차:
-
models.py에서 모델클래스 정의
from django.db import models
class Post(models.Model):
# 길이 제한이 있는 문자열 [CharField]
# [help_text] : HTML 양식(form)에서 사용자들에게 입력될 때 어떤 값을 입력해야
# 하는지 사용자들에게 알려주기 위해 보여주는 텍스트 라벨을 제공
title = models.CharField(max_length=100, help_text='Enter title')
#길이 제한이 없는 문자열 [TextField]
content = models.TextField()
# 해당 레코드 생성시 현재 시간 자동저장
created_at = models.DateTimeField(auto_now_add=True)
# 해당 헤코드 갱신시 현재 시간 자동저장
updated_at = models.DateTimeField(auto_now=True)
-
shell에서 migrations, migrate 실행 [이관작업]
# Shell 에서 이관작업 진행 $ python manage.py makemigrations $ python manage.py migrate-
makemigrations: django 의 model에서 변경사항을 기록
-
migrate: 변경사항을 실제 데이터베이스로 이관하고 반영
-
# Shell 에서 이관작업 진행
$ python manage.py makemigrations
$ python manage.py migrate
2. admin.py에 모델클래스 등록 **[어드민 사이트에서 이용하기 위함]**
# admin.py에 모델클래스 등록
from django.contrib import admin
from .models import Post
admin.site.register(Post)
4. View에서 사용하기:
from . models import 클래스이름
from django.utils import timezone
# model : Car 모델 객체를 받을 변수
model = Car.objects.all() # Car레코드 전부 조회
# tire : Car 모델의 필드값, "한국타이어": 필드에 매핑되는 값
model = Car.objects.get(tire = "한국타이어") # 필드=값 조건으로 조회(배열 반환)
model_cnt = Car.objects.count() # 레코드 수 반환(Car DB안의 모든 레코드 값 개수)
# DB에 해당 object를 저장합니다.
model.save()