기본 지원되는 모델필드 타입
레퍼런스 참조-->
https://docs.djangoproject.com/en/3.0/ref/models/fields/#field-types
Model field reference | Django documentation | Django
Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate
docs.djangoproject.com
그리고 다양한 커스텀 필드들
django-model-utils: https://django-model-utils.readthedocs.io/en/latest/
django-model-utils — django-model-utils 4.2.0.post14+g02bd67c documentation
© Copyright 2015, Carl Meyer Revision 02bd67cf.
django-model-utils.readthedocs.io
모델 필드들은 DB 필드타입을 반영
-DB에서 지원되는 필드들을 반영
Varchar 필드타입 -> charField, slugField, URLField, EmailField
파이썬 데이터타입과 데이터베이스 데이터타입을 매핑
AutoField -> int
BinaryField -> bytes
BooleanField -> bool
CharField/SlugField/URLField/EmailField -> str
같은 모델 필드라 할지라도 DB에 따라 다른 타입이 될 수 있다
validators(유효성 검사) 수행할 함수 다수 지정
from django.conf import settings
from django.db import models
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
blog_url = models.URLField(blank=True)
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=100, db_index=True)
slug = models.SlugField(allow_unicode=True, db_index=True) # ModelAdmin.prepopulated_fields 편리
desc = models.TextField(blank=True)
image = models.ImageField(blank=True) # Pillow 설치가 필요
comment_count = models.PositiveIntegerField(default=0)
tag_set = models.ManyToManyField('Tag', blank=True)
is_publish = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Comment(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Tag(models.Model):
name = models.CharField(max_length=50, unique=True)
-n:1의 관계를 다룰 때 n의 입장에서 ForeignKey를 작성
comment 테이블과 Post 테이블은 n:1의 관계이다. 포스트 안에 여러개의 댓글이 있기 때문이다.
따라서 post = models.ForeignKey(Post, on_delete=models.CASCADE) 코드 작성!
반면에 Profile 테이블은 사용자와 일대일 관계이기 때문에 OneToOneField를 사용
-comment_count(댓글 수)
PositiveInteagerField 사용-> 댓글 개수는 음수일 수 없기 때문에
default=0으로 두어서 기본값 지정
-tag_set 다수의 태그가 들어올 숭 ㅣㅆ음
ManyToManyField 사용
설계한 데이터베이스 구조에 따라 최대한 필드타입을 타이트하게 지정해주는 것이 입력값 오류를
막을 수 있음
-blank/null 지정은 최소화
-validators들은 타이트하게 지정
-백엔드에서의 유효성 검사는 필수
-직접 유효성 로직 만들면 안됨
보다 성능 높게 설계하기 위해 데이터베이스 이해
DRF 개념 (0) | 2022.08.08 |
---|---|
장고 admin을 통한 데이터 관리 (0) | 2022.04.05 |
장고 orm (0) | 2022.03.31 |
웹 프레임워크 (0) | 2022.03.28 |
detail 페이지 오답노트 (0) | 2022.03.21 |
댓글 영역