웹개발/인스타 클론 (1) Django
Django (20*) images앱의 Image, Comment 모델 생성(Abstract base class 이용)
Storage Gonie
2019. 6. 27. 01:58
반응형
# Abstract base class 란 무엇인가
- Abstract base class 는 모델이기는 하지만, 데이터베이스 테이블을 생성하지 않으며,
공통된 field를 자식한테 물려주는 목적으로 사용된다. 즉, 중복 코딩을 제거하기 위해 사용함.
- django.db.models.Model 을 상속받아 만들어지는 모델이며(단, 테이블 생성X),
다른 클래스들이 공통적으로 가지게할 field를 정의한 뒤,
Abstract base class 임을 구분하기 위해 내부에 Meta class를 정의하고 거기에 abstract = True를 넣어줘야 한다.
(Meta 클래스에는 부가적인 설명 정보가 들어간다. 여기에 적는 것은 field가 아님)
- 이전 장에서 User 모델을 만들 때 사용된 AbstractUser도 바로 이 abstract base class의 일종이다.
# Abstract base class 를 이용해 Image, Comment 클래스 정의하기
- User 모델에 필드를 추가할 때 null=True 속성을 줬었는데, 여기서는 이게 필요없다.
null=True 속성을 이전에 사용했던 이유는 User 모델에 필드를 추가하기 전에 테이블에 데이터가 존재해서 그런거였는데,
여기서는 이제 처음 만들어질 테이블이기 때문에 데이터가 없어서 필요없는 속성이다.
from django.db import models
class TimeStampedModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True) # 모델이 생성된 날짜, 테이블이 생성될 때 현재 시간이 저장되도록 하는 속성.
updated_at = models.DateTimeField(auto_now=True) # 모델이 업데이트 된 날, 테이블이 업데이트 되었을 때 현재 시간이 저장되도록 하는 속성.
class Meta:
abstract = True # abstract base class 임을 알림
class Image(TimeStampedModel):
file = models.ImageField() # 이미지파일
location = models.CharField(max_length=140) # 촬영한 위치
caption = models.TextField() # 이미지에 대한 설명
class Comment(TimeStampedModel):
message = models.TextField() # 댓글 텍스트
# 정의한 모델 DB에 반영시키기
python manage.py runserver # 코드상에 오류가 없는지 실행을 통해 먼저 확인
python manage.py makemigrations
python manage.py migrate
반응형