[Django] 게시판 만들기 (2) - 모델 생성하기

마이구미·2021년 12월 6일
0

Django

목록 보기
2/4
post-thumbnail

user와 blog 앱의 모델 생성하기

모델 코드

사용자와 게시판 앱의 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될 때마다 현재 날짜로 필드를 갱신시킨다. 여기를 참고하였다.

migration

모델이 변경되었으니 이를 반영하기 위해 마이그레이션을 해주어야 한다.
마이그레이션은 모델의 생성, 변경 내역을 관리하고 데이터베이스에 적용하여 손쉽게 데이터 베이스의 구조를 바꾸기 위해 사용하는 명령어이다.

python manage.py makemigration
python manage.py migrate

모델안의 요소들

모델은 필드, 메소드, 메타 데이터를 포함할 수 있다.

필드

필드는 데이터베이스 테이블에서 열을 나타낸다. 따라서 모든 타입의 값을 가질 수 있다.

  • 일반적인 필드 타입
    • CharField
    • TextField
    • AutoField
    • DateFiled, DateTimeField

메타 데이터

클래스 안에 meta 클래스를 만들어서 사용한다. 메타데이터를 이용하면 쿼리의 반환되는 기본 레코드 순서를 제어할 수 있다. (ordering 지정) 모델을 위한 새로운 접근 권한을 생성 및 적용 가능하게 하며, 다른 필드에 기반한 순서 정렬을 허용하거나, 또는 클래스가 "추상(abstract: 레코드를 생성할 수 없고, 대신 다른 모델들을 만들기 위해 파생되는 기본 클래스)"임을 선언할 수 있다.

메소드

모델은 메소드도 가질 수 있는데 표준 파이썬 클래스의 메소드인 __str__() 를 이용해서 각각의 object가 사람이 읽을 수 있는 문자열을 반환하도록 할 수 있다. 또한 get_absolute_url()도 일반적으로 사용하는 메소드이고 사용자가 원하는 메소드도 당연히 추가할 수 있다.

profile
마이구미 마시쪙

0개의 댓글