django

[Django] Model

peach_h 2023. 3. 25. 22:07
Model : 저장된 데이터베이스의 구조

장고는 Model을통해 데이터에 접근하고 조작한다.

이러한 Model은 사용하는 데이터들의 필수 필드들과 동작들을 포함한다.

일반적으로 각각의 모델은 하나의 데이터베이스 테이블에 Mapping한다.

Model class 1개  = 데이터베이스 테이블 1개

 

 

Model 생성 실습
1. project를 생성한 후에, App을 생성 -> settings에 등록한다
2. App / models.py를 수정

원하는 컬럼과 필수 조건을 명시한다.

from django.db import models

# Create your models here.
class myapp(models.Model):
    title = models.CharField(max_length=10)
    content = models.TextField()

 

-> 모델을 생성 or 변경 후에는 터미널에 꼭 2가지 명령어를 써줘야한다.

1. python manage.py makemigrations

2. python manage.py migrate

이 명령어들을 실행하지 않으면 데이터베이스에 변경사항이 적용되지 않는다 !

자주 하는 실수중 하나임

 

※ 생성된 Model 수정 시 주의사항
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.TextField()

Model class를 생성 후, 새로운 컬럼을 추가하고 makemigrations 하면 오류가 난다.
It is impossible to add a non-nullable field
-> 새로운 컬럼이 빈채로 들어와서 발생하는 오류

새로운 컬럼을 추가할 때는, null = Ture를 설정해주거나 default 값을 넣어줘야 한다. 

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.TextField(null=True)
    abc = models.TextField(default='abc')

 

이렇게 해주면 오류가 안난다 !

 

3. 출력 형식 추가 ( 필수는 아님 )

python의 __str__ method를 사용하여 class의 출력 형식을 지정해준다.

from django.db import models

# Create your models here.
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.TextField(null=True)
    abc = models.TextField(null=True)
    
    # 출력 형식 정해주기
    def __str__(self):
        return f'{self.title} {self.content}'

출력 형식을 지정하면 power shell을 이용해 데이터베이스 내용을 확인할 때, 지정한 형식으로 출력된다.