FlaSh.. 2019. 5. 16. 13:30

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 인 경우, 레코드 생성시 현재 시간으로 자동 저장

모델 등록절차:

  1. 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)

 

  1. 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()