이전 포스팅에서 views.py 파일에서 포켓몬 별로 이름, 설명, 레벨, 이미지를 불러오는 함수를 작성했다. 본 포스팅에서는 views.py 파일에 직접 작성하지 않고, 데이터를 불러오는 방법을 사용하기 위해, 데이터의 구조를 생성하는 방법을 설명한다.
pokemon-book디렉토리 내의models.py파일로 이동한다.
📂poketmon
📄manage.py
📄db.sqlite3
📂pokemon
📄__init__.py
📄settings.py
📄urls.py
📄wsgi.py
📂pokemon-book
📂static
📂templates
📂pokemon-book
📄pokemon-list.html
📄detail-pikachu.html
📄detail-charmander.html
📄detail-squirtturtle.html
📂migrations
📄__init__.py
📄admin.py
📄apps.py
📄models.py 📌
📄tests.py
📄views.py
📄urls.py
모든 모델은
class로 구성된다. Poke 라는 이름의 클래스를 생성한다.
from django.db import models
class Poke(models.Model): 📌
Poke 클래스의 포켓몬 이름
필드를 추가한다. 포켓몬 이름은문자열이기 때문에ChaField를 이용한다.
from django.db import models
class Poke(models.Model):
name = models.CharField(max_length=30) 📌
models의 ChaField는 저장할 최대 값을 max_length={}를 입력해 인자로 정해줘야 한다.
포켓몬 설명도 ChaField로 추가하고, 최대 길이를 200으로 지정한다.
from django.db import models
class Poke(models.Model):
name = models.CharField(max_length=30)
description = models.ChaField(max_length=200) 📌
레벨은
숫자기 때문에,IntegerField를 추가한다.
from django.db import models
class Poke(models.Model):
name = models.CharField(max_length=30)
description = models.ChaField(max_length=200)
level = models.IntegerField() 📌
마지막으로 이미지 경로를
ChaField로 추가한다. 최대 길이는 255로 적용한다.
from django.db import models
class Poke(models.Model):
name = models.CharField(max_length=30)
description = models.ChaField(max_length=200)
level = models.IntegerField()
img_path = models.ChaField(max_length=255) 📌
필드 정의가 끝났으면 함수를 하나 지정한다.
from django.db import models
class Poke(models.Model):
name = models.CharField(max_length=30)
description = models.ChaField(max_length=200)
level = models.IntegerField()
def __str__(self): 📌
return self.name
작성된
던더 str함수는 모델의 인스턴스를 문자열로 반환하는 함수다. 즉, 우리가 출력된 결과에서 인스턴스를 쉽게 식별할 수 있는 결과를 제공한다. 위 코드에서는 name값을 리턴해 피카츄, 파이리, 꼬부기로 인스턴스를 식별한다.
( 던더 = 더블 언더 스코어 = __ )
모델 작성이 끝났다. 모델을 새로 작성하거나 변경하면
장고에모델 변경을 알려줘야 한다. 터미널에서프로젝트 루트 디렉토리로 이동한 뒤 아래의 명령어를 입력한다.
python manage.py makemigrations
python manage.py migrate
makemigrations명령어는 모델의 변경사항 (생성,수정,삭제 등)을 반영한 새로운migration 파일을 생성한다.
migrate명령어는 migration 파일을 바탕으로 변경된 내용을실제 데이터베이스 구조에 적용한다.