Python/초간단 장고 Django

4. Django: Models

컴닥 2019. 7. 7. 10:43
반응형

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

서버를 실행해보면 드디어 북마크가 생겼음을 볼 수 있습니다.

 

테이블(= 클래스 명)에 자동으로 S를 추가하여 복수로 보여줍니다.
(중요하진 않지만) 실제 테이블 이름은 '앱이름_클래스이름'의 구조를 가집니다. 

add 버튼을 눌러 북마크 입력을 해봅시다. 

 

7. __str__

그런데 살펴 보시면 문제가 하나 보입니다. 

북마크의 리스트를 보면 무슨 북마크인지 알 수가 없습니다.
다음 주소에 해결법을... 

https://comdoc.tistory.com/entry/7-Django-ORM-Method-str

 

 

 

아래 그림 중 Models - ORM - DB 파트에 대해 간략히 알아봤는데요.

느낌이 오시나요?

 

반응형