프로그래밍

[Django] 장고 Model 본문

Python/Django

[Django] 장고 Model

시케 2023. 11. 24. 16:12
728x90
반응형

2023.11.24.금

Django Model

Django에서 모델은 django.db.models.Model 클래스를 상속하는 Python 클래스이다

(Django에서 Model 파트는 데이터와 관련된 일을 수행한다)

 

장고는 ORM(Object - Relation Mapping)을 지원한다
Models.py에 클래스 형태로 작성시  그에 맞게 맵핑된다
즉, 장고가 자동으로 DB를 관리해준다

 

Migrations은 이때 DB 스키마 변경을 기록한다
> Git 처럼 버전 관리를 가능케 한다

 

모델 필드 정의

Django 모델에서 여러가지 필드 유형을 사용하여 테이블 구조와 데이터 유형을 정의할 수 있다

1. CharField: 문자열을 나타내며 텍스트 데이터를 저장. max_length 매개변수를 사용하여 문자열의 최대 길이를 지정 가능

2. IntegerField: 정수 값을 나타내며 양수와 음수 정수 모두를 특정 범위 내에서 저장 가능

3. FloatField: 소수점 숫자를 나타내며 지정된 소수 자릿수를 가진 부동 소수점 숫자를 저장 가능

4. BooleanField: 불리언 값(True 또는 False)을 나타내며 이진 값이나 플래그를 저장하는 데 사용

5. DateField: 날짜 값을 나타내며 "YYYY-MM-DD" 형식으로 날짜를 저장 가능

6. DateTimeField: 날짜와 시간 값을 나타내며 "YYYY-MM-DD HH:MM:SS" 형식으로 날짜와 시간 정보를 모두 저장 가능

7. EmailField: 이메일 주소를 나타내며 입력된 값이 유효한 이메일 주소인지를 검증

8. FileField: 파일 업로드를 나타내며 파일 경로나 실제 파일 객체를 저장 가능

9. ForeignKey: 두 모델 간의 다대일 관계를 정의하는 데 사용. 다른 모델을 외래 키로 참조하는 데 사용. 이 필드는 관련 모델을 지정해야 하며, 일대다와 같은 관계를 설정하는 데 사용 가능

10. ManyToManyField: 두 모델 간의 다대다 관계를 정의하는 데 사용. 하나의 모델 인스턴스를 다른 모델 인스턴스와 여러 개 관련시킴. 관련 모델을 지정해야 하며, 관계를 관리하기 위해 중간 테이블을 생성

 

이 밖에도 여러가지 모델 필드 유형이 존재

https://docs.djangoproject.com/ko/4.2/ref/models/fields/#field-types

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

모델 간의 관계 생성

모델 간의 관계를 생성할 수 있으며

일대일(1 : 1), 일대다(1 : N), 다대다(N : N) 관계를 정의할 수 있다

 

일대일(1 : 1) 관계 정의

일대일 관계는 OneToOneField를 사용하여 생성한다

# 각 사용자마다 고유한 사용자 프로필을 가지고 있는 경우
# 1 : 1 = 사용자 : 사용자 프로필
from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField()

 

 

일대다(1 : N) 관계 정의

일대다 관계는 ForeignKey를 사용하여 나타낼 수 있다

# 1 : N = 블로그 글 : 댓글
class Comment(models.Model):
    post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    text = models.TextField()

 

 

다대다(N : N) 관계 정의

다대다 관계는 ManyToManyField를 사용하여 나타낼 수 있다

# N : N = 블로그 글 : 태그
class Tag(models.Model):
    name = models.CharField(max_length=30)
    posts = models.ManyToManyField(BlogPost)

 

ManyToManyField의 경우 별도의 설정을 하지 않으면 자동으로 테이블 생성한다

이때 생성되는 테이블의 경우 두 모델의 PK(기본키)만 가지고 있다

기본키 말고도 다른 필드를 이용하고 싶다면 through 매개변수를 통해 따로 사용자 정의 또한 가능하다

 

마이그레이션

마이그레이션 파일은 모델의 변경 사항을 기록한 Python 스크립트이다
모델을 변경할때 해당 변경 사항을 기록하는 것이라고 보면 된다

makemigrations 명령어를 실행하면
Django는 애플리케이션의 migrations 디렉토리에 마이그레이션 파일을 생성하며
이 파일은 데이터베이스 스키마를 어떻게 변경할지에 대한 정보를 담고 있다

migrate 명령어 실행시 마이그레이션 파일을 기반으로 실제 데이터베이스 스키마를 업데이트한다
Django는 마이그레이션 파일을 읽고, 데이터베이스에 대응하는 스키마 변경 작업을 수행한다

 

:: 마이그레이션 생성
python manage.py makemigrations

:: 마이그레이션 적용
python manage.py migrate

 

마이그레이션은 Django의 ORM을 기반으로 작동한다

Django 모델의 변경 사항은 마이그레이션 파일로 기록되고

Django는 해당 파일로 데이터베이스 스키마를 자동 업데이트한다

 

이는 데이터베이스 스키마의 버전 관리를 가능케하고

모델의 변경 사항을 추적하고 적용할 수 있다

 

 

 

 

 

 

 

728x90
반응형
Comments