[Django] Model

송수빈·2026년 5월 3일

SSAFY

목록 보기
7/15

Model

  • Model
    • 데이터베이스와 Python 클래스(객체)로 추상화된 형태로 상호작용
  • 개발자가 데이터베이스에 대한 깊은 지식 없이도 쉽게 데이터 관리 가능
  • 데이터베이스 변경 시에도 코드 수정 최소화, 재사용 가능한 데이터 모델을 통해 개발 효율성 향상

Model을 통한 DB(데이터베이스) 관리

  • urls.py: 사용자 요청의 시작점
  • views.py: 요청을 처리하고 models.py를 통해 데이터를 다룸
  • models.py: 데이터베이스를 정의하고, 데이터베이스와 상호작용
  • templates: views.py로부터 받은 데이터를 사용자에게 보여줄 화면을 구성

Model class

  • DB의 테이블을 정의하고 데이터를 조작할 수 있는 기능들을 제공
    • 데이터베이스 테이블의 구조를 설계하는 청사진(blue print) 역할을 한다.
    • 어떤 데이터(칼럼)를 저장할 지, 그 데이터의 형태는 어떠할지(타입, 길이 등)를 Python 코드로 명확히 정의한다.
  • Model class 작성
    • articles/models.py
      class Article(models.Model):
      		title = models.CharField(max_length=10)
      		content = models.TextField()
  • Model 클래스 살펴보기
    • 작성한 모델 클래스는 최종적으로 DB에 다음과 같은 테이블 구조를 만듦
      idtitlecontent
      • id 필드는 Django가 자동 생성
    • django.db.models 모듈의 Model이라는 부모 클래스를 상속받음
    • Model Field
      • 데이터베이스 테이블의 열(column)을 나타내는 중요한 구성 요소
      • ‘데이터의 유형’과 ‘제약 조건’을 정의

Model Field

  • Model Field
    • DB 테이블의 필드(열) 정의
    • 데이터 타입 및 제약 조건 명시

Field types

  • Field types (필드 유형)
    • 데이터베이스에 저장될 ‘데이터의 종류’를 정의
  • CharField()
    • 제한된 길이의 문자열을 저장
    • 필드의 최대 길이를 결정하는 max_length는 선택 옵션
  • TextField()
    • 길이 제한이 없는 대용량 텍스트를 저장
    • 무한대는 아니며 사용하는 시스템에 따라 달라짐
  • 주요 필드 유형
    • 문자열 필드: CharField, TextField
    • 숫자 필드: IntegerField, FloatField
    • 날짜/시간 필드: DateField, TimeField, DateTimeField
    • 파일 관련 필드: FileField, ImageField
  • DateTimeField의 필드 옵션 (optional)
    • auto_now: 데이터가 저장될 때마다 자동으로 현재 날짜 시간을 저장
    • auto_now_add: 데이터가 처음 생성될 때만 자동으로 현재 날짜시간을 저장

Field options

  • Field options (필드 옵션)
    • 필드의 ‘동작’과 ‘제약 조건’을 정의
  • 제약 조건(constraint)
    • 특정 규칙을 강제하기 위해 테이블의 열이나 행에 적용되는 규칙이나 제한 사항
    • 숫자만 저장되도록 제한을 두거나, 문자가 100자 까지만 저장되도록 하는 등의 제한 조건
  • 주요 필드 옵션
    • null: 데이터베이스에서 NULL 값을 허용할지 여부를 결정 (기본값: False)
    • blank: form에서 빈 값을 허용할지 여부를 결정 (기본값: False)
    • default: 필드의 기본값을 설정

Migrations

  • Migrations
    • Model 클래스의 변경사항(필드 생성, 수정 삭제 등)을 DB에 최종 반영하는 방법
    • 모든 변경 사항이 코드로 관리되어 협업 시 모델 변경 내역에 대한 추적과 공유가 수월함
  • Migrations 핵심 명령어 2가지
    • python manage.py makemigrations
      • 모델 변경을 감지하고 migration 파일을 생성하는 명령어
      • model class를 기반으로 최종 설계도(migration)을 작성
    • python manage.py migrate
      • migrate 명령어는 마이그레이션 파일의 python 코드를 SQL 문으로 자동 변환
      • 최종 설계도를 DB에 전달하여 반영
  • 이미 생성된 테이블에 필드를 추가해야 한다면
    • 모델 클래스 수정 (새로운 필드 작성)
    • 새로운 필드 추가 후 makemigrations 명령어 입력
    • migrate 후 테이블 필드 변화 확인

model class에 변경사항이 생겼다면, 반드시 새로운 설계도를 생성하고, 이를 DB에 반영해야 한다.
(1) model class 생성/수정 → (2) makemigrations → (3) migrate

Admin site

관리자 인터페이스

  • Django가 추가 설치 및 설정 없이 자동으로 제공하는 관리자 인터페이스
  • Django admin 계정 생성
    • python manage.py createsuperuser
    • admin.py에 작성한 모델 클래스를 등록해야만 admin site에서 확인 가능
      from django.contrib import admin
      from .models import Article
      
      admin.site.register(Article)

참고

  • 데이터베이스 초기화
    • Migration 파일 삭제, db.sqlite3 파일 삭제
  • SQLite
    • 데이터베이스 관리 시스템 중 하나이며 Django의 기본 데이터베이스로 사용됨
profile
🌱 🐜

0개의 댓글