모델에는 여러 클래스 변수가 있으며, 각 클래스 변수는 모델의 데이터베이스 필드(컬럼, 열)를 나타낸다. 이 변수에 들어갈 필드 값들이 데이터베이스의 레코드(행)가 된다. 아래 사진을 예로 들어보면,
- Menu 클래스에는 name라는 변수가 있고, menus라는 데이터베이스 테이블의 필드가 된다.
- name에 들어갈 필드 값의 길이는 최대 45자를 넘지 못한다.
- Category 클래스에는 name과 menu라는 변수가 있고, categories라는 데이터베이스 테이블의 필드가 된다.
- name에 들어갈 필드 값의 길이는 최대 45자를 넘지 못한다.
- menu에 들어갈 필드 값은 Menu 클래스를 외래키로 참조하며, 해당 클래스가 삭제되면 같이 삭제된다.
위와 같이 필드에 다양한 인수와 타입을 지정해서 데이터베이스를 만들 수 있다. 그 종류가 너무 다양해서 자주 쓰는 것들만 정리하고, 그 외에는 아래 참고 사이트에서 공식문서를 뒤져보자.
인수 | 설명 |
---|---|
default | 필드의 기본값 지정. 'default=0' 이면 기본값이 0이 된다. |
null | 'null=True' 라면 데이터베이스에 빈 값을 null 값으로 저장(기본값=False) |
blank | 'blank=True' 라면 필드가 빈 값을 받을 수 있다(기본값=False) |
choices | 길이가 2인 변수를 선택지 변수로 지정할 수 있다. 'choices=변수명' 으로 사용한다. |
primary_key | 'primary_key=True' 라면 필드를 기본키로 설정한다. |
on_delete=models.<인수값> | 참조 된 객체가 삭제 될 때의 동작을 지정한다. CASCADE: 삭제 시 개체를 참조하는 모든 개체 삭제 PROTECT: 참조 된 개체의 삭제를 방지 RESTRICT: 삭제 시 참조 된 개체가 NULL로 설정 |
타입 | 설명 |
---|---|
CharField | 작거나 중간 크기의 고정된 길이의 문자열. 데이터의 최대 길이(max_length)를 정해줘야 함. |
TextField | 임의의 긴 문자열. |
IntegerField | 정수값(모든 숫자)을 저장 |
DecimalField | 소숫점을 지정 할 수 있는 10진수 값(정밀함) |
DateField | 날짜정보를 저장. |
DateTimeField | 날짜, 시간정보 저장. auto_now_add=True: 객체가 처음 생성 될 때 사용 예)created_at = models.DateTimeField(auto_now_add=True) auto_now=True: 매번 객체가 저장 될 때 사용(update용) 예)updated_at = models.DateTimeField(auto_now=True) |
EmailField | 이메일 주소 저장 |
FileField | 파일 업로드 |
ImageField | 이미지 업로드 |
AutoField | 자동적으로 증가하는 IntegerField의 타입. id 값을 자동증가 시킬때 쓴다. |
ForeignKey | 일대다 관계를 지정 |
ManyToManyField | 다대다 관계를 지정 through: 중간 테이블의 class 이름 지정 |
Django 공식문서 - models/fields
mdn - Django Tutorial Part 3: Using models