web/django

Django model 생성하고 설정하기

민사민서 2024. 5. 7. 02:28

Django 앱 생성하기

- 프로젝트를 기능 단위로 쪼갠 덩어리 (웹 애플리케이션의 구성 요수, 하나의 기능적 단위)

django-admin startapp post

 

이렇게 post라는 앱을 생성하고

 

seminar/settings.py 파일을 수정해서 installed app 리스트에 추가

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'post.apps.PostConfig', # 'post' 라고만 적어도 됌
]

 

* 하나의 Django 앱은 여러 개의 모델을 포함할 수 있음 (= 여러 유형의 데이터를 다룰 수 있음)

* 앱을 생성했다면 model을 설계해야됨~~

=> 블로그 글(post) app이 가져야 하는 요소에는 제목, 내용, 작성 시점 등의 정보가 필요할 것

=> Post model을 만들어보자

 

(Post App의) Model 만들기

posts/models.py 의 내용을 아래와 같이 채운다

from django.db import models
from django.utils import timezone

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=256)
    content = models.TextField()
    created_at = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title

 

models.Model 클래스를 상속받고 title, content, created_at 필드 생성필드 타입 지정해줌

참고로 id라는 속성 값이 자동으로 추가된다 (모든 인스턴스가 갖는 고유의 id)

inner function을 활용해 객체 출력 시 title 값이 출력되도록 함

 

https://github.com/dkyou7/TIL/blob/master/%ED%8C%8C%EC%9D%B4%EC%8D%AC/Django/5.%20%5BDjango%5D%20Model%20%ED%95%84%EB%93%9C%ED%83%80%EC%9E%85%20%EC%A0%95%EB%A6%AC.md#1-model-%ED%95%84%EB%93%9C%ED%83%80%EC%9E%85-%EC%A0%95%EB%A6%AC'

https://docs.djangoproject.com/en/4.1/ref/models/fields/

위 사이트들을 참고해서 Model의 필드타입을 정하자

 

Django에서 Model 클래스를 생성한다고 끝이 아님.

DB와 연동시킬수 있도록 해당 모델에 대응하는 테이블을 똑같이 생성해줘야 함

=> Python Model 클래스의 수정 (및 생성)을 DB에 적용하는 과정을 migration 이라고 부른다

 

python manage.py makemigrations

 

 

- 모델에 대한 변경사항을 감지하고 migration 파일로 생성하는 것 (app/migrations 폴더에 저장, DB가 알아듣는 코드로~)

- field가 새로 생겼거나, 삭제해야 할 field가 생겼을 경우 반드시 새로운 migration file을 만들어줘야 함

- settings.py 파일의 INSTALLED_APPS에 해당 앱의 이름이 추가되어있어야 함 반드시!!

 

python manage.py migrate

 

- 마이그레이션파일을 실제 DB에 적용하는 과정, DB의 스키마를 "실제로" 변경

 

맞다 SQLite Viewer 라는 Extension을 깔자~~

db.splite3 파일을 확인해보면 post_post 라는 테이블 추가되어있음!!