Python/Django
[Django] Model과 Field
K.Seungmin
2024. 12. 17. 23:01
모델
먼저 모델은 데이터에 대한 단 한나의 정보의 소스로, 모델은 저장하고 있는 데이터의 필수적인 빌드와 동작을 포함하고 있습니다. 일반적으로 각각의 모델은 하나의 데이터베이스 테이블에 매핑됩니다. 모델의 특징으로는
- 각각의 모델은 파이썬 클래스로, 하위클래스인 django.db.models.Model에 속합니다.
- 모델의 각 속성은 데이터베이스 필드를 나타냅니다.
- Django는 자동으로 생성되는 데이터베이스-엑세스 API를 실행해 줍니다.
예제
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
Person 모델에서 first_name과 last_name을 모델의 필드로 가집니다. 각 필드는 클래스 속성으로 지정되며 각 속성이 데이터베이스의 열에 매핑됩니다. 위 모델은 다음과 같이 데이터베이스 테이블을 생성합니다.
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
모델 이용하기
모델을 정의한 후 장고에서 이 모델을 이용하려면 settings 파일을 수정해줘야 합니다. INSTALLED_APPS를 수정하면 되는데 models.py를 포함하고 있는 모듈의 이름을 추가하면 설정됩니다.
필드
필드는 모델에서 갖아 중요하고, 유일하게 필수적인 부분으로 데이터베이스 필드 목록을 정의하는 것입니다. 필드는 클래스 속성으로 정의됩니다.
from django.db import models
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()
모델의 각 필드는 적당한 Field 클래스의 인스턴스여야 합니다. Django는 필드 클래스 타입을 몇 가지 사항을 결정하는 데 사용합니다.
- 데이터베이스에 어떤 자료형의 데이터를 저장할지
- 폼 필드를 렌더링 할 때 사용해야 하는 디폴트 HTML 위젯
- Django admin과 자동 생성 폼에서 사용되는 최소한의 유효성 검증 요구사항
필드 종류
- CharField
- 고정된 길이의 문자열을 저장
- max_length 속성 필수
- TextField
- 길이에 제한이 없는 큰 텍스트를 저장
- IntegerField
- 정수를 저장
- FloatField
- 부동 소수점 숫자를 저장
- DecimalField
- 고정 소수점 숫자를 저장
- max_digits와 decimal_places 속성 필수
- PositiveIntegerField
- 양수만 저장 가능
- DataField
- 날짜를 저장
- TimeField
- 시간을 저장
- BooleanField
- True or False를 저장
- ForeignKey
- 다른 모델과 1:N 관계를 정의
- on_delete 옵션 필수
등등 다양한 필드가 있어서 형식에 맞게 사용해 주면 됩니다.
참고 사이트
https://docs.djangoproject.com/ko/5.1/topics/db/models/
모델 | Django documentation
The web framework for perfectionists with deadlines.
docs.djangoproject.com