Django 프로젝트-To Do List(3): 모델 만들기
1. 모델 구상
이제 본격적으로 모델을 구상해보자. 모델을 구상하기 위해서는 우선 만들려고 하는 웹에 필요한 것들을 생각해봐야 한다. 내가 만들 To Do List는 간단하기 때문에 아래와 같은 모델만 있으면 충분히 구현할 수 있다.
모델 구성
- 유저
- 할일
- 할일(디테일)
- 완료여부
- 날짜
일단 처음에는 개괄적인 To do list를 완성시키는 것이 목적이기 때문에 나중에 프로젝트를 얼추 완성한 다음 필요한 모델들을 더 추가할 계획이다. 저 정도만 있으면 일단 전체적인 틀은 완성된다고 볼 수 있을 것 같다. 이제 모델을 만들어보자.
# models.py
from django.contrib.auth.models import User
class ToDoList(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
title = models.CharField(max_length=50, verbose_name="할일")
description = models.TextField(null=True, blank=True, verbose_name="디테일")
complete = models.BooleanField(default=False, verbose_name="완료여부")
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
class Meta:
ordering = ['complete']
우선 user 모델이 눈에 띈다. 이는 장고의 django.contrib.auth 앱이 제공하는 User 모델을 참조키로 적용하여 FK를 선언했다. 이를 통해 사용자는 User 모델에 저장된 사람에 한정되어 해당 사용자만 본인의 모델에 접근할 수 있게 해준다.
속성들을 살펴보면 on_delete는 데이터베이스의 삭제조건을 가리킨다. CASCADE는 종속관계로 기본키가 사라질 때 모델의 인스턴스가 같이 삭제된다. null과 blank는 둘 다 기본값이 false로 필드를 비워두는 것을 허용할 지 설정하는 속성이다. 둘의 차이점은 null은 데이터베이스 상에서, blank는 폼에서 빈 채로 저장되는 것을 허용한다.
Class Meta를 통해 모델에 메타데이터를 부여할 수 있다. 메타데이터란 다른 데이터에 대한 설명과 정보를 제공하는데, ordering, db_table, verbose_name, verbose_name_plural 등을 지정할 수 있다.
(venv) D:\WebDev\Todolist>python manage.py makemigrations task
(venv) D:\WebDev\Todolist>python manage.py migrate
각각의 모델에 맞는 필드를 지정해주었으니 이제 데이터베이스에 모델을 저장해보자. 먼저 makemigrations를 통해 데이터베이스에 저장할 수 있는 형태를 만들어준다. 이때 뒤에 꼭 마이그레이션할 앱 이름을 넣어주자. 다음은 migrate를 통해 실제로 데이터베이스에 모델을 저장하자. 이제 모델이 올바르게 지정되었는지 관리자 페이지를 통해 한 번 확인해보도록 하자.
2. 관리자 페이지 확인
우선 관리자 페이지를 생성하기 위해 유저를 생성해야한다. createsuperuser 명령어를 통해 모든 권한을 가지는 슈퍼 사용자를 생성한다. 또한 아직까지는 관리자 페이지에 모델이 등록되지 않았으니 관리자 페이지에 모델을 등록해보자.
(venv) D:\WebDev\Todolist>python manage.py createsuperuser
# admin.py
from .models import ToDoList
admin.site.register(ToDoList)
다음 시간에는 관리자 페이지에 들어가서 모델을 직접 추가해보자. 모델이 성공적으로 추가되었다면 다음은 관리자 페이지를 커스터마이징해보자.
핵심요약
- User 모델
- python manage.py makemigrations 앱이름, python manage.py migrate
- 관리자 페이지 이용하기
Leave a comment