추상모델(abstract model)
기본 자주사용하는 컬럼들을 정리해서 Base 추상 모델 생성
from django.db import models
class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name="생성일")
updated_at = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="수정일")
class Meta:
abstract = True
아래와 같이 상속 받아서 모델 생성
AbstractUser은 장고에서 기본적으로 제공해주는 유저모델임
- user_index 장고는 기본키로 id를 primary_key로 생성해줌 그 키를 사용하지 않고 user_index를 primary_key로 사용
- USERNAME_FIELD는 장고에서 기본적으로 디폴트로 username키를 사용하는데 해당 키를 user_id로 변경하겠다는 내용
- app_label은 아래와 같이 라벨을 정의해놓으면 user = apps.get_model("user", "User")와 같이 모델을 호출할수 있음
- db_table은 테이블의 별칭을 user로 지정하겠다는 의미
class User(AbstractUser, BaseModel):
user_index = models.AutoField(primary_key=True, verbose_name="회원번호")
user_id = models.CharField(max_length=20, verbose_name="로그인ID", unique=True)
password = models.CharField(max_length=120, verbose_name="로그인PWD")
username = models.CharField(max_length=20, blank=True, null=True, verbose_name="회원이름")
USERNAME_FIELD = 'user_id'
class Meta:
db_table = "user"
verbose_name = "유저"
app_label = "user"
외래키 (Foreign key)
장고의 외래키는 아래와 같이 1:N의 관계를 나타낼 수 있다.
아래의 모델은 질문과 답변의 구조임 해당 구조에서 질문은 하나이고 여러개의 답변을 가질 수 있다.
python manage.py migrate명령어로 DB를 생성했을때
answer 테이블에 아래 이미지와 같이 외래키가 생성되는걸 볼 수 있다.
아래에서 related_name은 나중에 View단에서 역참조를할때 자주 사용된다.
class Question(BaseModel):
question_index = models.AutoField(primary_key=True, verbose_name="질문고유키")
qt_content = models.TextField(verbose_name="질문 내용")
class Meta:
db_table = "questions"
verbose_name = "질문"
class Answer(BaseModel):
answer_index = models.AutoField(primary_key=True, verbose_name="답변고유키")
question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name="question_for_answer")
# selected = models.CharField(max_length=1, blank=True, null=True, verbose_name="답변선택")
as_content = models.TextField(verbose_name="답변 내용")
class Meta:
db_table = "answers"
verbose_name = "답변"
이 외에도 장고에서는 one to one , one to many 모델을 지원함
'아카이브' 카테고리의 다른 글
Django - 실습편 JWT (4) (0) | 2021.06.08 |
---|---|
Django - 실습편 view (3) (0) | 2021.06.08 |
Django - 실습편 기본세팅 (1) (0) | 2021.06.08 |
ruby on rails - 실습 세팅편(1) (0) | 2021.06.03 |
마이크로서비스 아키텍처 - 개념정리 (3) (0) | 2021.05.29 |