ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. Django: Models
    Python/초간단 장고 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 파트에 대해 간략히 알아봤는데요.

    느낌이 오시나요?

     

    반응형
Designed by Tistory.