Django Model

뚝딱뚝딱·2023년 9월 17일
1

Django

목록 보기
4/13
post-thumbnail

Django Model

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

DB의 테이블을 정의하고 데이터를 조작(생성, 수정, 삭제)할 수 있는 기능들을 제공
→ 테이블 구조를 설계하는 청사진(blueprint)

📎 모델과 데이터베이스를 같은 걸로 생각하면 안됨!!

model 클래스 작성

  • 클래스 이름 = article
  • (models.Model) => 상속 / models 모듈의 Model이라는 클래스를 상속받고 있다.
  • 클래스 변수 2가지 (title, content)

<클래스 2개>

  • CharField 클래스의 인스턴스인 title
  • Textfield 클래스의 인스턴스인 content
    • title, content는 인스턴스이자 클래스 변수가 된다.

📎 모델 클래스 == 테이블 설계도

model 클래스 살펴보기

django.db.models 모듈의 Model이라는 부모 클래스를 상속받음

  • Models은 model에 관련된 모든 코드가 이미 작성 되어있는 클래스
    • 개발자는 가장 중요한 테이블 구조를 어떻게 설계할지에 대한 코드만 작성하도록 하기 위한 것 (프레임워크의 이점)
  • 클래스 변수명 = 테이블의 각 '필드(열) 이름'
    • 행 = 레코드라고 함
  • model Field 클래스 : 테이블 필드의 '데이터 타입'을 의미함
  • model Field 클래스의 키워드 인자(필드 옵션) -> 테이블 필드의 '제약조건'관련 설정

model Field 클래스의 키워드 인자(필드 옵션)

  • 테이블 필드의 '제약조건' 관련 설정

제약 조건

데이터가 올바르게 저장되고 관리되도록 하기 위한 규칙
ex) 숫자만 저장되도록, 문자 100자 까지만 저장되도록 하는 등

Migrations

model 클래스의 변경사항(필드 생성, 수정 삭제 등)을 DB에 최종 반영하는 방법

migrations 과정

migrations 핵심 명령어 2가지

$ python manage.py makemingrations
   # model class를 기반으로 최종 설계도(migration) 작성

$ python manage.py migrate
   # 최종 설계도를 DB에 전달하여 반영

추가 Migrations

이미 생성된 테이블에 필드를 추가해야 한다면?

  • 이미 기존 테이블이 존재하기 때문에 필드를 추가 할 때 필드의 기본 값 설정이 필요함
  1. 현재 대화를 유지하면서 직접 기본 값을 입력하는 방법 ✔
  2. 현재 대화에서 나간 후 models.py에 기본 값 관련 설정을 하는 방법
  • 추가하는 필드의 기본 값을 입력해야 하는 상황

    • 날짜 데이터의 경우 직접 입력하기 보다 Django가 제안하는 기본 값을 사용하는 것을 권장
    • 아무것도 입력하지 않고 enter 누르면 Django가 제안하는 기본 값으로 설정된다!!
  • migration 과정 종료 후에 2번째 migration 파일이 생성됨을 확인함

  • 이처럼 Django는 설계도를 쌓아가면서 추후 문제가 생겼을 시 복구하거나 되돌릴 수 있도록 한다(마치 'git commit')

  • migrate 한 후 테이블 필드 변화 확인하기

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

Model Field

DB 테이블의 필드(열)을 정의하며, 해당 필드에 저장되는 데이터 타입과 제약조건을 정의

CharField()

  • 길이의 제한이 있는 문자열을 넣을 때 사용(필드의 최대 길이를 결정하는 max_length는 필수 인자)

TextField()

  • 글자의 수가 많을 때 사용

DateTimeField()

  • 날짜와 시간을 넣을 때 사용
  • DateTimeFielddml 선택인자
    1. auto_now : 데이터가 저장될 때마다 자동으로 현재 날짜시간을 저장
    2. auto_now_add : 데이터가 처음 생성될 때만 자동으로 현재 날짜시간을 저장


Admin site

Automatic admin interface

Django는 추가 설치 및 설정 없이 자동으로 관리자 인터페이스를 제공
-> 데이터 확인 및 테스트 등을 진행하는 데 매우 유용

admin 계정 생성

$ python manage.py createsuperuser
  • email은 선택사항이기 때문에 입력하지 않고 진행 가능
  • 비밀번호 입력 시 보안상 터미널에 출력되지 않으니 무시하고 입력 계속!!

admin에 모델 클래스 등록

  • admin.py에 작성한 모델 클래스를 등록해야만 admin site에서 확인 가능

참고

Migrations 기타 명령어

$ python manage.py showmigrations
  • migrations 파일들이 migrate 됐는지 안됐는지 여부 확인하는 명령어
  • [X] 표시가 있으면 완료되었음을 의미
$ python manage.py sqlmigrate articles 0001
  • 해당 migrations 파일이 SQL언어(DB에서 사용하는 언어)로 어떻게 번역되어 DB에 전달되는지 확인하는 명령어

SQLite

데이터베이스 관리 시스템 중 하나이며 Django의 기본 데이터베이스로 사용됨
(파일로 존재하며 가볍고 호환성이 좋음)

CRUD

소프트웨어가 가지는 기본적인 데이터 처리 기능

Create(저장)

Read(조회)

Update(갱신)

Delete(삭제)

profile
나의 행복 만들기

0개의 댓글