# 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
속성 : 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).
행동: update_date(self), str(self)
update_date(self)
: 인스턴스의 updated_at
필드를 현재 시간으로 바꾸어주고 바뀐 정보를 저장해주는 함수입니다. 해당 인스턴스의 정보에 변화가 생겼을 때 호출할 함수입니다.__str__(self)
: 파이썬의 내장 메소드처럼 쉘이나 후에 만들게 될 관리자 페이지에서 보여지는 객체의 정보를 반환해줍니다. 우리가 작성한 함수의 경우 title
만 반환되기 때문에 객체의 title
을 확인할 수 있습니다.> python manage.py makemigrations
# 내가 짠 파이썬 코드를 DB가 알아들을수 있게 번역하는 명령어
> python manage.py migrate
# migrate는 DB에 그 내용을 적용하라는 명령어
$ 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()