Django - 모델(Model)

개발 환경 설정하기
🛠 Python 및 가상 환경 설정 (Git Bash 기준)
1. Python 설치 (최신 버전 권장)
2. 가상 환경 생성 및 활성화
python -m venv django-projects # 프로젝트 폴더 생성 및 가상 환경 설정
source django-projects/Scripts/activate # 가상 환경 활성화 (Windows)
source django-projects/bin/activate # 가상 환경 활성화 (Mac/Linux)
3. 가상 환경 비활성화
deactivate
4. Django 설치 및 버전 확인
pip install django # Django 설치
python -m django --version # Django 버전 확인
Django 프로젝트 생성
프로젝트 생성
django-admin startproject mysite
- mysite 폴더가 생성되며, Django 프로젝트의 기본 구조가 자동으로 설정됨.
프로젝트 실행
cd mysite # 프로젝트 폴더로 이동
python manage.py runserver # 개발 서버 실행
- 기본적으로 http://127.0.0.1:8000/에서 Django 기본 페이지를 확인할 수 있음.
Django 앱(App) 생성
앱 생성
python manage.py startapp polls
- polls 폴더가 생성되며, 앱 관련 파일들이 포함됨.
- polls는 독립적인 기능을 담당하는 Django의 모듈로, 여러 개의 앱을 한 프로젝트에 추가 가능.
앱 등록 (settings.py 수정 필요)
Django는 새로 생성한 앱을 인식하지 않으므로 mysite/settings.py의 INSTALLED_APPS에 앱을 등록해야 함.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
...,
'polls.apps.PollsConfig', # polls 앱 등록
]
URL 설정 및 뷰(View) 연결
URL 설정 (mysite/urls.py & polls/urls.py 수정)
1. polls/urls.py 생성 (없다면 새로 만들어야 함)
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'), # 기본 URL 처리
]
2. mysite/urls.py에 polls URL 포함
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')), # polls 앱의 URL을 포함
path('admin/', admin.site.urls),
]
3. 뷰(View) 생성 (polls/views.py 수정)
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, Django Polls!")
4. 서버 실행 후 확인
- 브라우저에서 http://127.0.0.1:8000/polls/ 접속 → "Hello, Django Polls!" 메시지 출력
모델(Model) 만들기
모델 정의 (polls/models.py)
- 질문과 선택지를 저장하는 모델을 생성
- models.Model을 상속받아 테이블을 정의해야 함
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) # 투표 수
마이그레이션 적용
1. 마이그레이션 파일 생성
- 모델을 기반으로 데이터베이스 변경 사항을 정의하는 마이그레이션 파일 생성
python manage.py makemigrations polls
2. 마이그레이션 적용 (DB에 반영)
- 데이터베이스에 실제 테이블이 생성됨
python manage.py migrate
마이그레이션 확인
- 적용된 마이그레이션 목록을 확인 가능
python manage.py showmigrations
Django에서는 다양한 모델 필드를 제공하며, 모델에 필드를 추가하거나 삭제한 후에는 반드시 마이그레이션을 수행해야 합니다. 또한, 관리자(admin) 페이지를 활용하여 데이터를 편리하게 관리할 수 있습니다.
모델 필드 추가
(1) 모델 변경
- 모델 파일(models.py)에서 새로운 필드를 추가합니다. 예를 들어, BooleanField와 FloatField를 추가할 수 있습니다.
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
is_active = models.BooleanField(default=True) # Boolean 필드 추가
rating = models.FloatField(default=0.0) # Float 필드 추가
(2) 마이그레이션 생성 및 적용
python manage.py makemigrations # 마이그레이션 파일 생성
python manage.py migrate # 데이터베이스에 변경 사항 반영
(3) 마이그레이션 확인
- SQLite를 사용하는 경우, 터미널에서 데이터베이스에 접속하여 마이그레이션 적용 여부를 확인할 수 있습니다.
sqlite3 db.sqlite3
SELECT * FROM django_migrations; # 마이그레이션 정보 확인
.schema polls_question; # 테이블 구조 확인
모델 필드 삭제
모델에서 필드를 제거하는 경우, 올바른 마이그레이션 절차를 따라야 합니다.
(1) 특정 마이그레이션으로 되돌리기
python manage.py migrate polls 0001 # 이전 마이그레이션 상태로 되돌리기
(2) 필드 삭제 및 마이그레이션 파일 정리
- models.py에서 해당 필드를 삭제합니다.
- migrations 폴더 내 최근 마이그레이션 파일(예: 0002_auto_XXXXXX.py)을 삭제합니다.
(3) 다시 마이그레이션 적용
python manage.py makemigrations
python manage.py migrate
Django 관리자 페이지 설정
Django의 관리자 페이지(admin site)는 모델 데이터를 편리하게 관리할 수 있도록 해줍니다.
(1) 관리자 계정 생성
python manage.py createsuperuser
- 아이디와 비밀번호를 입력하여 관리자 계정을 생성합니다.
(2) 관리자 페이지 접속
- 서버 실행 후 브라우저에서 /admin URL에 접속합니다.
- 생성한 관리자 계정으로 로그인합니다.
- 사용자(User) 추가 및 권한 설정이 가능합니다.
모델 등록 및 관리
Django 관리자 페이지에서 모델을 관리하려면 admin.py에 모델을 등록해야 합니다.
(1) admin.py에 모델 등록
from django.contrib import admin
from .models import Question
admin.site.register(Question)
(2) __str__ 메서드 정의
- 관리자 페이지에서 객체가 어떻게 표시될지 설정할 수 있습니다.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text # 관리자 페이지에서 질문 텍스트로 표시됨
(3) 필드 추가 후 관리자 페이지 반영
- 모델에 필드를 추가한 후 마이그레이션을 수행합니다.
- 관리자 페이지에서 모델을 클릭하면 새 필드가 추가된 것을 확인할 수 있습니다.
- 필드를 제거하려면 앞서 설명한 마이그레이션 취소 및 파일 정리 절차를 따라야 합니다.
'학습 주제 > Django & Django Rest Framework' 카테고리의 다른 글
| Django REST Framework - Serializer & API (0) | 2025.03.10 |
|---|---|
| Django - 예외 처리하기 & Admin (0) | 2025.03.10 |
| Django - 상세 페이지 & 폼 & 커스터마이징 (0) | 2025.03.10 |
| Django - 모델 관계 기반 필터링 & 뷰 & 템플릿 (0) | 2025.03.10 |
| Django Shell에서 모델 활용하기 (0) | 2025.03.09 |