파이썬-장고

Django (3)

threegopark 2021. 7. 7. 13:35
728x90

애플리케이션 개발하기

 

1.1 Model 코딩

Model 작업이란 데이터베이스 테이블을 생성하는 작업이다. 내가 만들 프로젝트는 설문을 진행하고 결과를 보여주는 기능을 가지고 있기 때문에 이전 포스팅에서 설계한 것처럼 Question과 Choice 테이블을 가지고 있는 polls 애플리케이션을 설계해야 한다.

polls 애플리케이션 하위 항목인 models.py를 다음과 같이 수정한다.

from django.db import models

# Create your models here.

#장고에서는 데이터 테이블을 하나의 클래스로 맵핑한다.

#Question table = Question class
class Question(models.Model):
    #테이블 클래스는 django.db.models.Model 클래스를 상속받아 정의한다.
    #클래스 변수명은 컬럼명을 그대로 맵핑한다.
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    
    def __str__(self):
        return self.question_text

#Choice table = Choice class
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    
    def __str__(self):
        return self.choice_text
  • 장고는 PK (Primary Key)를 클래스에 지정해주지 않아도 항상 PK에 대한 속성을 Not Null 및 Autoincrement로, 이름은 id로 자동으로 만들어 준다.
  • DateTimeField() 필드 클래스에 정의한 date published는 pub_date 컬럼에 대한 레이블 문구이다.
  • FK (Foreign Key)는 항상 다른 테이블의 PK에 연결되므로 Question 클래스의 id 변수까지 지정할 필요 없이 Question 클래스만 지정하면 된다.
  • __str__(self) 메서드는 객체를 문자열로 표현할 때 사용하는 함수이다. Admin 사이트나 장고 쉘 등에서 테이블 명을 보여주기 위해 사용된다.

 

1.2 Admin 사이트에 테이블 반영

위의 models.py에서 정의한 테이블을 Admin 사이트에서 확인하기 위해서는 admin.py 파일에 등록해야 한다.

from django.contrib import admin

from polls.models import Question, Choice
# Register your models here.

admin.site.register(Question)
admin.site.register(Choice)

--> 테이블을 새로 만들 때는 models.py와 admin.py 두 개의 파일 모두를 수정해야 한다!!

 

 

1.3 데이터베이스 변경사항 반영

위처럼 테이블을 새로 생성하거나 변경한 경우 이를 데이터베이스에 실제 적용시켜줘야 한다.

> python manage.py makemigrations
> python manage.py migrate
  • 마이그레이션(migrations)은 테이블 및 필드의 생성, 삭제, 변경 등과 같이 데이터베이스에 대한 변경사항을 알려주는 정보이다. 물리적으로는 애플리케이션 디렉토리별로 마이그레이션 파일이 존재한다. 즉, 이번 예제에서는 makemigrations 명령에 의해 polls/migrations 디렉토리 하위에 마이그레이션 파일들이 생기고, 이 마이그레이션 파일들을 이용해 migrate 명령으로 데이터베이스에 테이블을 만들어주는 것이다.

'파이썬-장고' 카테고리의 다른 글

Django (4)  (0) 2021.07.11
Django (2)  (0) 2021.07.07
Django (1)  (0) 2021.07.07
파이썬 웹 표준 라이브러리  (0) 2021.07.03
웹 프로그래밍의 이해  (0) 2021.06.21