Django Model 생성

Jwahoon Kim·2021년 7월 6일
0

Django

목록 보기
4/10

MTV 패턴에서 Model을 생성하는 법

# blogPosts(앱이름)/models.py
from django.db import models
from django.utils import timezone

# Create your models here.
class Post(models.Model): 
    # 모델 클래스명은 단수형을 사용 (Posts(x) Post(O))
    # id는 자동 추가
    # models.Model을 상속받는 Class로 작성
    title = models.CharField(max_length=256)
    content = models.TextField()
    created_at = models.DateTimeField(default=timezone.now)
    updated_at = models.DateTimeField(blank=True, null=True)

    def update_date(self): # 나중에 수정할 때 사용
        self.updated_at = timezone.now()
        self.save()

    def __str__(self):
        return self.title
  1. 속성 : id, title, content, created_at, updated_at

    • id: 각 모델 별로 모든 인스턴스는 고유의 id를 가지고 있습니다. 이 id는 특정 인스턴스를 참조할 때 주로 사용되는 속성이기 때문에 같은 모델의 다른 인스턴스들과 중복되지 않고 고유한 값을 유지하는 것이 중요합니다. 따라서 특별하게 지정되지 않았다면, id 속성의 field type은 AutoField 가 되어 자동으로 관리됩니다. (정수 1씩 증가)

    • title : 우리가 작성할 Post의 제목에 해당됩니다.

    • content : 우리가 작성할 Post의 내용에 해당합니다.

    • created_at : default 값으로 현재 시간을 반환하는 timezone.now 를 설정한 인자와 함께 DateTimeField 필드 타입을 선언했기 때문에 객체가 생성되면 생성된 시점의 시간이 저장되게 됩니다.

    • updated_at : 마찬가지로 DateTimeField 형 필드이며 blank=True, null=True 이므로 객체를 만들 때 아예 값을 주지 않아도 되고(null), 혹은 빈 값으로 설정해주어도 됩니다(blank).

  2. 행동: update_date(self), str(self)

    • update_date(self) : 인스턴스의 updated_at 필드를 현재 시간으로 바꾸어주고 바뀐 정보를 저장해주는 함수입니다. 해당 인스턴스의 정보에 변화가 생겼을 때 호출할 함수입니다.
    • __str__(self) : 파이썬의 내장 메소드처럼 쉘이나 후에 만들게 될 관리자 페이지에서 보여지는 객체의 정보를 반환해줍니다. 우리가 작성한 함수의 경우 title 만 반환되기 때문에 객체의 title 을 확인할 수 있습니다.

새로운 모델을 작성 후!

  • 아래와 같이 DB에 모델을 적용시켜야한다!
> python manage.py makemigrations
# 내가 짠 파이썬 코드를 DB가 알아들을수 있게 번역하는 명령어

> python manage.py migrate
# migrate는 DB에 그 내용을 적용하라는 명령어

Djagno Shell에서 Model 다루기

$ python manage.py shell
>>> from blogPosts.models import Post
>>> Post.objects.all()
<QuerySet []>   # QuerySet은 데이터들을 담고 있는데 아직 아무것도 없는 것을 확인할 수 있습니다

>>> Post.objects.create(title='title1', content='hello1')
>>> Post.objects.get(id=1)
<Post: title1> # Post model의 __str__ 함수에 설정한 값이 출력됩니다.

>>> Post.objects.all()
<QuerySet [<Post: title1>]>
>>> exit()

0개의 댓글