당신은 멋쟁이, 우리는 장고쟁이~

0%

TodoList 3편 - 모델설계하기

Todo List 모델 설계하기



INSTALLED_APPS 에 앱등록하기


config/settings.py 파일에 INSTALLED_APPS 안에, todo 앱을 등록해 줍니다.



settings.py 파일을 수정해주는 김에,

언어설정과, 타임존 세팅까지 해줍니다.


1
2
LANGUAGE_CODE - 'ko-kr'
TIME_ZONE = 'Asia/Seoul'




모델 계획하기


내가 할일 이라는, Todo List 의 모델을 설계해 봅니다.

기본적으로, 아래와 같이 테이블로 정리된 사항들을 가지고 있었으면 좋겠습니다.


번호 필드명 설명 데이터타입
1 name 내가 할일에 대한 짧은 이름 문자
2 description 내가 할일에 대한 정보 긴 문자열
3 date_created 할일 생성 날짜 날짜
4 date_deadline 데드라인 날짜 날짜
5 images_related 관련된 이미지 (선택사항) 이미지
6 files_related 관련된 파일들 (선택사항) 파일


하나의 TodoList 는, 관련된 images 와 files 필드들을 가지어,

할일에 대한 더 많은 세부정보를 첨부할수 있게 해주었습니다. 이를 모두 한 테이블에 넣기 보다는,



아래와 같이, 3가지 테이블로 나누고, 필드들을 정리해보았습니다.


TodoList TodoList_images TodoList_files
필드명 데이터 타입 필드명 데이터 타입 필드명 데이터 타입
name CharField todo ForeignKey todo ForeignKey
description TextField image ImageField file FileField
date_created DateField()
date_deadline DateField()


하나의 Todo 는 여러개의 이미지들을 가질수 있고,

하나의 Todo 는 여러개의 파일들을 가질수 있습니다.

두 테이블은 하나의 Todo 에 ForeignKey 로 연결 됩니다.



models.py 파일 작성하기



위에서 계획했던 모델링 대로, models.py 파일을 실제로 작성해 봅니다.


저는 아래와 같이 작성해 주었습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from django.db import models
from datetime import date
import datetime

# Create your models here.


class TodoList(models.Model):
name = models.CharField(max_length=40, verbose_name="할일제목")
description = models.TextField(max_length=200, verbose_name="할일세부사항")
date_created = models.DateField(auto_now_add=True, verbose_name="생성날짜")
date_deadline = models.DateField(verbose_name="데드라인")

def remaining_days(self):
delta = self.date_deadline - date.today()
days = delta.days
return days


def __str__(self):
return f'{self.name} | {self.description} | {self.date_created} | {self.date_deadline}'


class TodoList_images(models.Model):
todo = models.ForeignKey(TodoList, on_delete=models.CASCADE)
image = models.ImageField(upload_to='todo/images/%Y/%m', blank=True)


class TodoList_files(models.Model):
todo = models.ForeignKey(TodoList, on_delete=models.CASCADE)
files = models.FileField(upload_to='todo/files/%Y/%m', blank=True)



Images 를 위한 패키지 Pillow 설치



모델을 다 작성한 다음, migrations 를 시도하면, 아래와 같은 오류 메시지가 뜹니다.


1
2
3
4
5
6
python manage.py makemigrations
SystemCheckError: System check identified some issues:

ERRORS:
todo.TodoList_images.image: (fields.E210) Cannot use ImageField because Pillow is not installed.
HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow".

이 에러를 해결하기 위해서는, 이미지 파일을 위한 패키지인, pillow 를 설치해야만 합니다.


아래 명령어를 실행하여, 패키지를 설치해 줍니다.

1
pip install Pillow



설치가 완료되었으면, makemigrations 와 migrate 를 실행하여, 데이터베이스를 생성해 줍니다.


makemigrations, migrate 해주기



python manage.py makemigrations 를 실행,



python manage.py migrate 를 실행,