Tiny Finger Point Hand With Heart
본문 바로가기
Python/Django

[Django] Model Field

by yoondii 2023. 1. 30.
728x90
반응형

 

Django Model은 대부분의 데이터를 저장할 수 있는 필드(Field)를 지원하는데 모든 필드에 사용할 수 있는 공통 옵션이 있고, 각각의 필드마다 가지고 있는 고유 옵션이 있습니다. 여기서는 자주 사용할 만한 몇 가지 필드와 옵션을 살펴보겠습니다.

 

필드(Field)

필드(Field)는 데이터 테이블에서의 열(column), 즉 데이터의 속성을 의미합니다.

CharField

class CharField(max_length=None)

제한된 길이의 문자열을 위한 필드입니다.

  • max_length 필수 인수이며 입력할 최대 길이를 설정합니다.

IntegerField

class IntegerField()

정수 값을 위한 필드이며 -2147483648 부터 2147483647 범위를 지원합니다.

BooleanField

class BooleanField()

Boolean 값을 위한 필드 입니다.

DateField

class DateField(auto_now=False, auto_now_add=False)

DateField는 파이썬의 datetime.date 객체 형태로 표시되는 날짜 필드입니다.

  • auto_now true로 설정되면 해당 객체가 변경(save) 될 때마다 자동으로 필드 값을 지금으로 수정합니다. '마지막 수정 시간' 같은 항목으로 사용하면 좋겠죠?
  • auto_now_add 모델이 처음 생성될 때 한 번, 자동으로 필드 값을 지금으로 설정합니다. '생성된 시간'을 저장하기 위해 많이 사용합니다.

DateTimeField

class DateTimeField(auto_now=False, auto_now_add=False)

파이썬의 datetime.datetime 객체 형태로 표시되는 날짜 필드 입니다. DateField와 인수 옵션은 같습니다.

EmailField

class EmailField(max_length=254)

CharField의 하위 클래스로 문자열이 이용 가능한 이메일 주소인지 EmailValidator를 통해 확인합니다. EmailValidator의 내부 구조가 궁금하다면 아래 문서를 참고하세요. (https://docs.djangoproject.com/en/3.1/ref/validators/#django.core.validators.EmailValidator)

FileField

class FileField(upload_to=None, max_length=100)

파일 업로드를 위한 필드 입니다.

ImageField

class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100)

FileField를 상속하여 구현되는 파일 업로드를 위한 필드이며 기본적으로 최대 길이가 100인 문자열 형식으로 생성됩니다. 위에서 나왔던 FileField에서 업로드된 파일이 정상적인 이미지 파일인지 확인하는 과정이 추가된 필드로 이미지 처리를 위한 Pillow 라이브러리가 필수적으로 필요합니다. 이 부분은 뒤에서 함께 다뤄보도록 하겠습니다.

  • height_field & width_field 객체가 저장 될 때 이미지의 높이와 너비값이 자동으로 채워 집니다.

이 밖에도 IP 주소를 체크를 하는 GenericIPAddressField, JSON 파일을 위한 JSONField (django 3.1 버전 이상부터 지원) 특정 폴더의 파일 패스를 표현하는 FilePathField, URL을 위한 URLField 등 다양한 필드가 있습니다. 다음 공식 문서를 참고하세요. ( https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.Field.default )


옵션(Option)

아래 옵션은 모든 필드 타입에 사용할 수 있으며 선택적으로 적용할 수 있습니다.

null

Field.null

기본 값은 False이며 Null 값 허용 여부를 선택 합니다.

만약 이 null 옵션을 적용할 필드가 문자열 기반 필드 (Char, Text)일 경우에는 주의해서 사용해야 하는데 ' ' (빈 문자열)과 Null 모두 해당 필드의 데이터가 없다는 것을 의미하기 때문입니다. 일반적으로 데이터가 없다는 것을 의미하는 값은 하나여야 하므로 Django는 문자열 기반 필드가 데이터가 없음을 표시할 때는 ' '(빈 문자열)을 사용하도록 권장하고 있습니다.

blank

Field.blank

기본 값은 False이며 True로 설정한 경우 필드 값을 빈 값으로 설정할 수 있습니다.

그렇다면 null과 blank의 차이는 무엇 일까요? null은 온전히 데이터베이스와 관련된 사항이고 blank는 데이터의 유효성 검사와 관련된 옵션입니다. 예를들어 blank가 True라면 해당 필드에 데이터를 입력하지 않아도 유효성 검사를 통과하게 됩니다.

default

Field.default

필드의 기본값을 설정하는 옵션으로 값 또는 함수가 들어갈 수 있습니다.

db_column

Field.db_column

해당 필드에 사용할 데이터베이스 속성 명을 지정합니다. 따로 지정하지 않을 경우 일반적으로 필드의 이름을 사용합니다.

더 많은 필드와 옵션에 대해 알고 싶다면 아래 django 공식 문서를 참고하세요. https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.Field.default

728x90
반응형

'Python > Django' 카테고리의 다른 글

[Django]. CRUD 더 알아보기  (0) 2023.01.30
[Django] Migrations & Migrate  (0) 2023.01.30
[Django] 상태 코드(Status Code)  (0) 2023.01.30
[Django] Template Language  (0) 2023.01.29
[Django] render( )함수  (0) 2023.01.29

댓글