# Model 이란?
- Django Framework 에서 데이터베이스와의 상호작용을 관리하는 클래스
- 모델은 각각이 DB Table 이며 속성을 정의하는 요소인 Field 와 함께 여러 동작 (함수) 를 지니고 있다.
- Python Django 에서 Model Class 는 django.db.models.Model 의 서브 클래스이다.
- Django 환경에서 서버 개발을 하는 경우 필수적으로 사용된다.
- 내부에 Meta class 를 구현하여 Model 에 관한 설정들을 추가 설정할 수 있다.
주요 기능
- 데이터베이스 테이블 생성 및 관리 : 모델 클래스 정의 시 Django 가 데이터베이스 테이블을 자동으로 생성해준다.
- ORM 제공 : 모델을 생성 시 SQL 쿼리 작업 필요 없이 Python 코드를 통해 DB Record 작업을 할 수 있게 된다.
- 데이터 유형 설정 가능 : Field 를 통해 문자열, 숫자, Boolean 등 특정 데이터만 저장할 수 있고 여러 설정이 가능해진다.
# Meta class
- Model 의 메타데이터를 정의하는 데 사용
- 모델의 동작 방식을 조정하고 DB 이름, 정렬 순서 등 여러 설정을 할 수 있게 해준다.
내부 속성
• db_table: 데이터베이스 테이블 이름을 지정
• ordering: 쿼리셋의 기본 정렬 순서를 지정
• verbose_name: 모델의 단수형 이름을 지정
• verbose_name_plural: 모델의 복수형 이름을 지정
• unique_together: 특정 필드 조합의 유일성을 보장
• index_together: 특정 필드 조합에 대한 인덱스를 생성
• abstract: 모델을 추상 클래스로 사용
• permissions: 사용자 정의 권한을 추가
• get_latest_by: 최신 객체를 결정할 필드를 지정
• managed: 모델이 Django에 의해 자동으로 관리될지 여부를 지정
예제
class TestModel(models.Model):
name = models.CharField(default="Test", max_length=30)
age = models.IntegerField(null=False)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'custom_table_name' # 테이블 이름을 custom_table_name 으로 변경
# Field 란?
- 데이터베이스에서 테이블의 특정 Column 을 의미한다.
- 데이터의 Type 을 지정할 수 있으며 Null 허용, 기본값 설정, Unique 설정 등 개발자가 원하는 여러 조건들을 설정해줄 수 있다.
- 한 모델 내에서 각 Field 의 이름은 중복으로 사용할 수 없다.
Field 의 종류
많은 Field 들이 존재하지만, 자주 사용하는 것들만 우선 나열해보겠다.
• CharField: 고정 길이의 문자열을 저장
• TextField: 가변 길이의 문자열을 저장
• IntegerField: 정수를 저장
• FloatField: 부동 소수점을 저장
• DateField: 날짜를 저장
• DateTimeField: 날짜와 시간을 저장
• EmailField: 이메일 주소를 저장
• BooleanField: 불리언 값을 저장
• ForeignKey: 다른 모델에 대한 외래 키 관계를 저장
• ManyToManyField: 다대다 관계를 저장
# 생성한 모델을 데이터베이스에 적용시키는 법
from django.db import models
class TestModel(models.Model):
name = models.CharField(default="Test", max_length=30)
age = models.IntegerField(null=False)
created_at = models.DateTimeField(auto_now_add=True)
위와 같이 models.py 에 모델 클래스를 생성 후 python manage.py makemigrations 를 하면 Django 가 아래와 같이 마이그레이션 파일을 생성해준다.

* 만약 no changes .. 나 에러가 나는 경우 Installs Apps 에 [앱].apps.[Config class] 가 지정되어 있는지 확인. 안되어 있다면 추가
마이그레이션 파일 생성 후 App - migrations 폴더를 보면 위의 0001_initial.py 파일이 생성된 것을 확인할 수 있을 것이다.

하지만 이렇게 Migrations File 을 생성한 것만으로는 DB 에 Table 이 생성되지 않는다.
우리는 이 파일을 생성하였고 DataBase 에 반영하겠다는 것을 manage.py 를 통해 알려야한다.
다시 다음과 같은 명령어를 입력해주자.
python manage.py migrate
정상적으로 작업이 진행되었다면 Applying test.0001_initial... OK 라는 문구가 나왔을 것이다.
이제 마지막으로 Table 이 생성되었는지 확인해보자
그러려면 우선 터미널에 아래 명령어를 입력하여 Shell 에 접속해야한다.
python manage.py shell
그 다음 우리가 만든 Model class 를 shell 에 import 해야하므로 아래 명령어도 입력한다
from 앱이름.models import 모델클래스 이름
마지막으로 Model.objects.all() 을 입력해주면 아래와 같은 문장이 나온다면 DB 에 Table 이 성공적으로 생성된 것이다.

만약 데이터베이스에 테이블이 생성되지 않은 경우 아래와 같은 에러가 나오게 된다.

# Admin 페이지 연동
- admin.py 파일을 연다
- admin.site.register(모델클래스) 를 등록
- python manage.py createsuperuser 를 통해 관리자 생성
- python manage.py runserver 를 통해 로컬 서버 실행
- 로컬서버주소/admin 에 접속을 하게 되면 아래와 같이 Test models 라는 섹션을 볼 수 있다.

만약 데이터를 생성하고 싶은 경우 ADD TEST MODEL 을 클릭하여 데이터를 생성할 수도 있다.
'프로그래밍 > Django + Python' 카테고리의 다른 글
[Django + Python] 파이썬에서 글이 너무 길어지는 경우 여러 줄 대응 (0) | 2024.09.25 |
---|---|
[Django + Python] 프로젝트 패키지 관리하는 방법 - Pip Freeze (0) | 2024.09.25 |
[Django] Django 설치 및 프로젝트 생성법 (0) | 2024.09.23 |