모델 추가
모델이란?
데이터를 저장하기 위한 하나의 단위
복잡한 SQL문 없이 파이썬만으로 CRUD 기능을 구현할 수 있다.
모델 만들기
우선 startapp 명령어를 이용해 앱을 만든 뒤, 앱의 models.py에 다음과 같이 작성한다.
from django.db import models
# 클래스의 매개변수로 'models.Model'을 적는 것은,
# Post 클래스가 models 모듈의 Model 클래스를 확장하여 만든 파이썬 클래스 임을 표시함.
class Post(models.Model):
title = models.Charfield(max_length=30)
content = models.TextField()
created_at = models.DateTimeField()
# author : 추후 작성 예정
위와 같이 작성한 뒤,
python manage.py makemigrations
를 통해 마이그레이션을 생성한다.
정상적으로 마이그레이션이 생성되었다면python manage.py migrate
를 통해 실제 db에 모델을 적용한다.settings.py파일에 앱을 등록해야 정상적으로 동작한다!
.gitignore에 migrations도 추가한다
admin 페이지에 Post 모델 추가하기
앱 이름/admin.py에 다음 내용을 추가합니다.
from django.contrib import admin
from .models import Post
admin.site.register(Post)
admin 페이지에 __str__()
함수로 포스트 제목과 번호 보여주기
Post 모델을 다음과 같이 수정한다.
class Post(models.Model):
title = models.Charfield(max_length=30)
content = models.TextField()
created_at = models.DateTimeField()
def __str__(self):
return f'[{self.pk}]{self.title}
python의 f String은 문자열 안에 변수를 표시하기 편하게 하는 format String이다.
장고 프로젝트의 기준 시간 바꾸기
- settings.py 파일을 연다
- TIME_ZONE = 'UTC'를 'Asia/Seoul'로 수정한다.
- USE_TZ 는 False로 설정한다.
DateTime의 auto_now_add와 auto_now 활용하기
DateTimeField에는 auto_now와 auto_now_add 설정이 있다.
auto_now_add는 처음 레코드가 생성될 때, 현재 시간을 저장하도록 하는 설정이다.
auto_now는 레코드가 생성되고 수정될 때 마다 현재 시간을 저장하도록 한다.
created_at은 auto_now_add로, updated_at은 auto_now 설정을 사용한다.
class Post(models.Model):
title = models.Charfield(max_length=30)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f'[{self.pk}]{self.title}
위의 코드들을 입력한뒤,
makemigrations
와migrate
를 수행한다.
장고 셸 사용하기
laravel의 tinker처럼 장고도 터미널에서 간단한 명령들을 테스트 해볼 수 있는 환경이 있다.
python manage.py shell
로 실행한다.
테스트로 다음과 같은 명령들을 실행해본다.
>>> from blog.models import Post
>>> p = Post.objects.last()
>>> p.title
>>> p.created_at
>>> p.updated_at
>>> exit()