본문 바로가기
Web Framework/Django

[Django] Model 및 Database 1

by cogito21_python 2024. 4. 21.
반응형
 Index
 1. Django 명령어
 2. Model Style
 3. Model
 4. Model Field
 5. Model Meta Class
Reference

1. Django 명령어

Django 명령어

# 데이터베이스 migration
python manage.py makemigrations <애플리케이션명>

# 테이블들을 데이터베이스에 생성
python manage.py migrate

# 파이썬 쉘 실행
python manage.py shell

# 생성된 마이그레이션 SQL 출력 확인
python manage.py sqlmigrate <애플리케이션명> <번호>

 

2. Model Style

Model Style

- 필드명은 lowercase와 underscore로 구성

- Meta 클래스는 필드명 이후에 정의

- 모델의 inner class와 method 순서는 아래를 따름
  - database fields

  - custom manager attributes

  - class Meta

  - def __str__()

  - def save()

  - def get_absolute_url()

  - custom methods

- choice가 존재한다면 모두 uppercase로 명명. Enum types일 경우 아래 방법 이용

class MyModel(models.Model):
    DIRECTION_UP = "U"
    DIRECTION_DOWN = "D"
    DIRECTION_CHOICES = {
        DIRECTION_UP: "Up",
        DIRECTION_DOWN: "Down",
    }
class MyModel(models.Model):
    class Direction(models.TextChoices):
        UP = "U", "Up"
        DOWN = "D", "Down"

 

3.  Model

Model

- django.db.models.Model

- 데이터베이스와 연동되는 ORM: 데이터베이스 추상화 API

- 각 모델은 데이터베이스 필드가 클래스의 각 속성을 표현하는 단일 데이터베이스 테이블에 매핑

- 장고는 각 모델에 자동으로 증가하는 primary key 필드를 추가. 기본 값은 BigAutoField(64비트 정수)

- 각 애플리케이션 구성 혹은 DEFAULT_AUTO_FIELD 설정에 따라 전역 지정

from django.db import models

class 모델명(models.Model):
  class 필드클래스명(models.TextChoices):
    속성1 = '값', '명칭'

  id = BigAutoField()
  필드명 = models.CharField(max_length=250)
  
  class Meta:
    ordering = ['필드명1', '-필드명2']
    indexs = [
        models.Index(fields=['-필드명1']),
    ]
    
  # 객체를 표현하는 문자열 반환
  def __str__(self):
    return 반환문자열

 

4. Model Field

Model Field

- django.db.models

models.BigAutoField()
- 64비트 정수 ID

models.CharField()
- SQL DB의 VARCHAR로 변환
- max_length: 최대 길이 지정
- choices: 선택 가능한 subclass 지정
- default: 기본값 설정

models.SlugField()
- SQL DB의 VARCHAR로 변환
- slug는 문자, 숫자 밑줄 또는 하이픈만 포함하는 레이블

models.TextField()
- SQL DB의 Text 칼럼으로 변환

models.DateTimeField()
- SQL DB의 DATETIME 컬럼으로 변환
- default: django.utils.timezone을 기본 값
- auto_now_add: 객체 생성시 날짜가 자동으로 저장
- auto_now: 갱신된 마지막 날짜와 시간을 저장

 

- Enumeration Field

  - choices: 값-레이블 쌍인 열거형 항목들

  - labels: 열거형 항목 명칭

  - values: 열거형 항목 값

  - names: 열거 항목 명칭

class 필드클래스명(models.TextChoices):
  필드명1 = 'DF', 'Draft'
  필드명2 = 'PB', 'Published'

 

5.  Model Meta Class

Model Meta Class

- 모델에 대한 메타데이터 정의

- 데이터베이스 인덱스: 결과 필터링하거나 정렬시 쿼리의 성능 향상

ordering
- 결과를 정렬. 하이픈 사용시 내림차순

indexes
- 데이터베이스의 인덱스 정의
- 인덱스는 오름차순 또는 내림차순으로 하나 이상의 필드로 구성하거나 함수 표현식 및 DB 함수로 정의
- MYSQL에서는 내림차순으로 고정.

db_table
- 데이터베이스 이름 지정

default_manager_name
- 기본 관리자를 지정

 

 


Reference

[Text: Django(Model Index)]
https://docs.djangoproject.com/en/5.0/ref/models/indexes/
[Text: Django(Model Field)]
https://docs.djangoproject.com/en/5.0/ref/models/fields/
반응형

'Web Framework > Django' 카테고리의 다른 글

[Django] Admin  (0) 2024.04.22
[Django] Model 및 Database 2  (0) 2024.04.22
[Django] Project 및 Application  (0) 2024.04.21
[Django] Django 개요 및 환경 설정  (0) 2024.04.21
[Django] 학습 참고자료  (0) 2024.03.09