사용자와 게시판 앱의 models.py에 각각의 모델을 작성해주었다.
# blog/models.py
from django.db import models
from user.models import User
class Post (models.Model):
author = models.ForeignKey("user.User", on_delete=models.CASCADE)
title = models.CharField(max_length=200)
content = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
# method
def __str__(self):
return self.title
# user/models.py
from django.db import models
class User(models.Model):
user_id = models.CharField(max_length=100, verbose_name='id')
email = models.EmailField(max_length=100, verbose_name='이메일')
password = models.CharField(max_length=100, verbose_name='비밀번호')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='가입 날짜')
updated_at = models.DateTimeField(auto_now=True, verbose_name='수정 날짜')
def __str__(self):
return self.user_id
유저가 삭제되면 그 유저가 생성했던 게시물도 삭제하기 위해서 post의 fk로 user를 사용하였다. 그리고 최초 생성일과 수정일을 위해서 auto_now_add, auto_now를 사용하였다. auto_now_add는 모델이 처음으로 생성될 시(save) 현재 날짜를 추가하고 auto_now는 해당 모델이 save될 때마다 현재 날짜로 필드를 갱신시킨다. 여기를 참고하였다.
모델이 변경되었으니 이를 반영하기 위해 마이그레이션을 해주어야 한다.
마이그레이션은 모델의 생성, 변경 내역을 관리하고 데이터베이스에 적용하여 손쉽게 데이터 베이스의 구조를 바꾸기 위해 사용하는 명령어이다.
python manage.py makemigration
python manage.py migrate
모델은 필드, 메소드, 메타 데이터를 포함할 수 있다.
필드는 데이터베이스 테이블에서 열을 나타낸다. 따라서 모든 타입의 값을 가질 수 있다.
클래스 안에 meta 클래스를 만들어서 사용한다. 메타데이터를 이용하면 쿼리의 반환되는 기본 레코드 순서를 제어할 수 있다. (ordering 지정) 모델을 위한 새로운 접근 권한을 생성 및 적용 가능하게 하며, 다른 필드에 기반한 순서 정렬을 허용하거나, 또는 클래스가 "추상(abstract: 레코드를 생성할 수 없고, 대신 다른 모델들을 만들기 위해 파생되는 기본 클래스)"임을 선언할 수 있다.
모델은 메소드도 가질 수 있는데 표준 파이썬 클래스의 메소드인 __str__() 를 이용해서 각각의 object가 사람이 읽을 수 있는 문자열을 반환하도록 할 수 있다. 또한 get_absolute_url()도 일반적으로 사용하는 메소드이고 사용자가 원하는 메소드도 당연히 추가할 수 있다.