MTV 패턴 - Model
App 생성
$ django-admin startapp Polls
생성된 app을 django에 등록하기 위해서는 setting.py에 INSTALLED_APPS에 추가시켜줘야 함
# Polls/apps.py
from django.apps import AppConfig
class PollsConfig(AppConfig):
name = 'Polls'
# setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
INSTALLED_APPS += [
'polls.apps.PollsConfig'
]
Model
# Polls/models.py
from django.db import models
from django.core.validators import MinLengthValidator
class Question(models.Model):
CATEGORY_CHOICE=(
(1, '일상'),
(2, '학습'),
(3, '취미'),
)
SECRET_CHOICE=(
(False, '공개'),
(True, '비공개'),
)
title_validator = MinLengthValidator(20, "길이가 너무 짧습니다.")
writer = models.ForeignKey(Writer, on_delete=models.CASCADE)
category = models.IntegerField(choices=CATEGORY_CHOICE, verbose_name='카테고리')
title = models.CharField(max_length=20, verbose_name='제목', validator=[title_validator])
content = models.TextField()
pub_date = models.DateTimeField(default=timezone.now)
secret = models.BooleanField(default = False, choices=SECRET_CHOICE, verbose_name='공개여부')
class Meta:
db_table = 'question' # 테이블명
def __str__(self): # toSring()과 같음
return self.title
○ Model 필드 파라미터 (Form 필드 파라미터와 유사)
- max_length : 최대글자수
- null : Null값 허용 (d : False)
- unique: Unique값 (d : False)
- blank : 유호성 검사시 공백 허용 (d : False)
- default : 디폴트값
- verbose_name : 변수명을 오버라이딩할 이름
- choices : select box를 사용
- validators : 유효성검사 (유효성 검사는 Model에서 하는걸 추천)
- DateField, DateTimeField, TimeField
- auto_now : 수정할때마다 현재시간로 갱신 (d : False)
- auto_now_add : 삽입시 현재시간 입력 (d : False)
- OneToOneField, ForeignKey, ManyToManyField
- on_delete : 삭제시 관계를 맺은 모델의 데이터 처리방법 (models.CASCADE, PROTECT, RESTRICT, SET_NULL, SET_DEFAULT, SET(), DO_NOTHING)
[SET_NULL -> null=True옵션이 있어야만 가능 / SET_DEFAULT -> default=True옵션이 있어야만 가능]
- related_name : 역참조 관계시 호출할 이름 설정 (modelname_set 대신 사용할 이름)
- limit_choices_to (dictionary 형태) : 관계를 맺은 모델의 해당 필드값으로 입력제한 (콤보상자)
migration(링크)
migration 명령어를 사용하여 새로운 Model을 django에게 알려줘야 함.
- makemigrations : 새로운 migration 생성
- migrate : migration을 django에 적용 (테이블 생성)
$ python manage.py makemigrations polls
$ python manage.py migrate polls