Django 모델

1 개념[ | ]

django 모델
django Model
  • 모델은 데이타를 가진 데이타베이스 구조를 말함
  • 저장할 데이타의 필드와 데이타형식 등을 가짐
  • 모델 파일을 통해 마이그레이션 파일이 만들어짐. 마이그레이션 파일은 데이타베이스를 모델에 맞춰 업데이트 하기위한 기록

2 투표앱 모델 만들기[ | ]

  • 1. models.py의 모델 변경
  • 2. python mange.py makemigrations 명령으로 마이그레이션 생성
  • 3. python manage.py migrate 명령으로 데이터베이스에 적용

3 투표 모델 구성[ | ]

투표앱을 위해서는 Question과 Choice 두 가지가 필요하다. Question은 질문, Choice는 선택과 투표수를 가진다.

#polls/models.py
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
→ 각 모델은 django.db.models.Model을 자식 class로 포함함.
→ ForeignKey는 각각의 Choice가 하나의 Question에 연계되어 있음을 말함.

※ Django는 many-to-one, many-to-many, one-to-one 등의 일반적인 데이터베이스 관계 모델을 지원함

4 모델 활성화[ | ]

1. 프로젝트에 앱을 포함한다.

# mysite/settings.py
INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
→ 'polls'는 디렉토리, 'apps'는 모듈(apps.py) 그리고 'PollsConfig'는 클래스임


2.모델 생성

python manage.py makemigrations APP_NAME
(DJANGO) johnjeong@zetawiki:~/DJANGO/mysite$ python manage.py makemigrations polls
Migrations for 'polls':
  polls/migrations/0001_initial.py:
    - Create model Choice
    - Create model Question
    - Add field question to choice
→ makemigration을 실행시켜 모델과 관련하여 변경된 내용을 migration에 저장하고 싶다는 사실을 Django에 알려줌. 본 예제의 경우는 새로울 모델을 생성함

3. 마이그레이션

(DJANGO) johnjeong@zetawiki:~/DJANGO/mysite$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Applying polls.0001_initial... OK
migrate 명령은 마이그레이션이 되지 않은 것들을 마이그레이션 해준다.

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}