- 
          
          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서버를 실행해보면 드디어 북마크가 생겼음을 볼 수 있습니다.  테이블(= 클래스 명)에 자동으로 S를 추가하여 복수로 보여줍니다.  (중요하진 않지만) 실제 테이블 이름은 '앱이름_클래스이름'의 구조를 가집니다. add 버튼을 눌러 북마크 입력을 해봅시다.  7. __str__그런데 살펴 보시면 문제가 하나 보입니다.  북마크의 리스트를 보면 무슨 북마크인지 알 수가 없습니다. 
 다음 주소에 해결법을...https://comdoc.tistory.com/entry/7-Django-ORM-Method-str 아래 그림 중 Models - ORM - DB 파트에 대해 간략히 알아봤는데요. 느낌이 오시나요?   반응형 반응형