Django - Model

2025. 3. 9.·학습 주제/Django & Django Rest Framework
 

Django - 모델(Model)

 

출처: https://opentutorials.org/course/4201

개발 환경 설정하기

🛠 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) 관리자 페이지 접속

  1. 서버 실행 후 브라우저에서 /admin URL에 접속합니다.
  2. 생성한 관리자 계정으로 로그인합니다.
  3. 사용자(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) 필드 추가 후 관리자 페이지 반영

  1. 모델에 필드를 추가한 후 마이그레이션을 수행합니다.
  2. 관리자 페이지에서 모델을 클릭하면 새 필드가 추가된 것을 확인할 수 있습니다.
  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
'학습 주제/Django & Django Rest Framework' 카테고리의 다른 글
  • Django - 예외 처리하기 & Admin
  • Django - 상세 페이지 & 폼 & 커스터마이징
  • Django - 모델 관계 기반 필터링 & 뷰 & 템플릿
  • Django Shell에서 모델 활용하기
굥여9
굥여9
9idryd 님의 블로그 입니다.
  • 굥여9
    문과의 개발
    굥여9
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 학습 주제 (86)
        • 자료구조와 알고리즘 (8)
        • HTML & 웹크롤링 (4)
        • 데이터 시각화 (4)
        • Django & Django Rest Framew.. (11)
        • AWS 클라우드 (6)
        • SQL & 데이터 웨어하우스 (11)
        • 데이터파이프라인과 Airflow (12)
        • Docker & K8S (8)
        • DBT (4)
        • CI & CD (1)
        • 빅데이터 처리와 Spark (12)
        • Kafka & Spark Streaming (5)
        • 보안 엔지니어링 (0)
      • 구름 프로펙트 클라우드 엔지니어링 (0)
        • [Monolithic] 서비스의 기초와 설계 (0)
        • [MSA & EDA] 비동기 전환과 정합성 (0)
        • [Cloud Native] K8s 기반 인프라와 .. (0)
      • 프로그래머스 데브코스 데이터 엔지니어링 (4)
      • 개발 기록 (24)
        • 일일 (24)
        • 주간 (0)
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
굥여9
Django - Model
상단으로

티스토리툴바