4. Django: Models
ORM은 객체(O)와 관계형(R) 데이터베이스의 매핑(M) 이라고 했었습니다.
이번 시간에는 장고에서는 어떻게 둘을 연결하는 지 보겠습니다.
ORM에서 '테이블'은 '클래스'로 정의합니다.
'컬럼'은 '클래스 변수'로 정의합니다.
이게 ORM의 다는 아니고, 거의 다입니다.
생각보단 별 거 없습니다...(????)
그럼 클래스의 구성 요소는 변수와 메서드인데, 메서드는 뭘 하냐?
테이블과 컬럼 같은 정적인 데이터와 관련은 있지만
정적인 테이블과 컬럼이 할 수 없는 동적인 부분을 처리합니다.
이 예제에서 메서드를 사용하지는 않습니다.
설명은 끝났으니 이제 코딩을...
1. bookmarks/models.py
# bookmarks/models.py
from django.db import models
class Bookmark(models.Model):
title = models.CharField(max_length=40, blank=True, null=True)
url = models.URLField('url', unique=True)
장고의 models.Model을 상속받아서 테이블을 클래스로 등록합니다.
앞에서 설명했듯 클래스명은 테이블명이 됩니다.
ex) Bookmark -> bookmarks_bookmark
(거의 알 필요는 없지만,
정확하게는 앱명_테이블명 + 소문자화 해서 테이블명이 됩니다.)
클래스 변수 명은 컬럼명이 됩니다. ex) title, url
컬럼(장고에서는 필드)의 타입은 models의 필드 타입 클래스로 해결합니다. ex) models.CharField
컬럼의 옵션들은 인수로 전달하면 됩니다. ex) max_length=40, blank=True, null=True
필드에 대한 더 자세한 정보는 다음 링크를 참고하세요.
https://docs.djangoproject.com/ko/2.2/ref/models/fields/
소스를 수정했다고 자동적으로 DB를 갱신해주는 건 아니고
migration을 통해 갱신해야 합니다.
2. config/settings.py
앱을 설정 파일에 등록해 봅니다.
config/settings.py 에서
INSTALLED_APPS를 찾은 뒤
bookmarks.apps.BookmarksConfig 를
넣어주면 됩니다.
간단하게 bookmarks 만 등록해도 됩니다만,
정확하게 등록하는 것을 권장합니다.
# config/settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bookmarks.apps.BookmarksConfig', # 마지막 쉼표를 넣어도 되고..
]
여기서 bookmarks.apps 은 bookmarks/apps.py 파일을 의미하는 겁니다.
혹시 이게 뭔 소린가 하시는 분은 모듈과 패키지 파트를 보시면 됩니다.
https://wikidocs.net/29 https://wikidocs.net/1418
굳이 찾아볼 필요는 없지만,
apps.py 파일을 열어보면
BookmarksConfig 클래스가
자동으로 생성되어있습니다.
# bookmarks/apps.py
from django.apps import AppConfig
class BookmarksConfig(AppConfig):
name = 'bookmarks'
여기까지 한 뒤 서버를 실행한 뒤 관리자 페이지를 봐도 아무 변화가 없습니다. -0-
이제 관리자 페이지에 등록을 해봅시다. ^^
3. bookmarks/admin.py
# bookmarks/admin.py
from django.contrib import admin
from bookmarks.models import Bookmark
admin.site.register(Bookmark, BookmarksAdmin)
어드민 페이지에서 DB를 보려면 모델을 가져와야겠습니다.
DB는 모델에 정의되어 있으니까요.
bookmarks/models.py에서 Bookmarks 클래스를 임포트한 뒤
이것을 관리자 페이지에 등록해 줍니다.
물론 관리자 페이지에서 볼 필요가 없는 모델이라면 굳이 등록할 필요는 없습니다.
관리자 페이지에 등록하지 않더라도 migration을 할 수 있습니다.
4. makemigrations
(venv) C:\PyProjects\myapp>python manage.py makemigrations
Migrations for 'bookmarks':
bookmarks\migrations\0001_initial.py
- Create model Bookmarks
소스 수정 후
makemigrations 명령을 이용해서
각 앱 폴더 아래에 있는 migrations폴더에 마이그레이션 파일을 만들고,
migrate 명령으로 DB에 반영합니다.
5. migrate
(venv) C:\PyProjects\myapp>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, bookmarks, contenttypes, sessions
Running migrations:
Applying bookmarks.0001_initial... OK
앞서 설명한 절차입니다.
6. runserver
서버를 실행해보면 드디어 북마크가 생겼음을 볼 수 있습니다.
add 버튼을 눌러 북마크 입력을 해봅시다.
7. __str__
그런데 살펴 보시면 문제가 하나 보입니다.
북마크의 리스트를 보면 무슨 북마크인지 알 수가 없습니다.
다음 주소에 해결법을...
https://comdoc.tistory.com/entry/7-Django-ORM-Method-str
아래 그림 중 Models - ORM - DB 파트에 대해 간략히 알아봤는데요.
느낌이 오시나요?