-
4. Django: ModelsPython/초간단 장고 Django 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
서버를 실행해보면 드디어 북마크가 생겼음을 볼 수 있습니다.
add 버튼을 눌러 북마크 입력을 해봅시다.
7. __str__
그런데 살펴 보시면 문제가 하나 보입니다.
북마크의 리스트를 보면 무슨 북마크인지 알 수가 없습니다.
다음 주소에 해결법을...https://comdoc.tistory.com/entry/7-Django-ORM-Method-str
아래 그림 중 Models - ORM - DB 파트에 대해 간략히 알아봤는데요.
느낌이 오시나요?
반응형