brunch

매거진 Django doc

You can make anything
by writing

C.S.Lewis

by 장영석 Feb 19. 2018

Django Model - Field options

Model field reference

Model field reference

이 문서는 Django가 제공하는 필드 옵션과 필드 유형을 포함한 모든 필드의 API reference를 포함하고 있다.


Field options

다음의 인수는 모든 필드 유형에 사용할 수 있고 모두 선택 가능하다.


null


Field.null

True 값이면, Django는 빈 값을 데이터베이스에 NULL로 저장한다. 기본값은 False다.


CharFieldTextField 같은 문자 기반의 필드들에 null 사용을 피해라. 문자 기반의 필드에 null=True가 있다면 "no data"의 값이 NULL과 빈 문자열 두 가지가 가능함을 의미한다. 대부분의 경우에, "no data"에 두 가지 값은 불필요하다. Django의 규칙은 NULL 대신 빈 문자를 사용하는 것이다. 한 가지 예외는 CharFieldunique=Trueblank=True 모두 설정될 때이다. 이러한 상황에서는, 빈 값으로 여러 개 객체를 저장할 때 unique 제한 위반을 피하기 위해 null=True가 필요하다.


또한 문자 기반과 문자 기반이 아닌 필드 모두의 경우, null 파라미터는 오직 데이터베이스 저장소에만 영향을 주므로 form에서 빈 값 허용을 원하면  blank=True 설정이 필요하다. 


Note

오라클 데이터베이스를 백엔드로 사용하면, null 속성과 상관없이 빈 문자를 표시하기 위해 NULL 값이 저장된다.


BooleanFieldnull 값을 허용하려면 대신에 NullBooleanField를 사용해라.


blank


Field.blank


True면 필드가 blank를 허용한다. 기본값은 False.


null과 다른 점에 주의해라. null은 순수하게 데이터베이스와 관련된 반면에, blank는 유효성 검사와 관련되어있다. 필드가 blank=True면, 폼 유효성 검사에 빈 값 입력을 허용한다. 필드가 blank=False면, 해당 필드의 값은 필수다.


choices


Field.choices


필드에 choices를 사용하기 위해서는 정확히 두 항목(예: [(A, B), (A, B)...])의 반복 가능한 리스트 또는 튜플이 되어야 한다. choices가 주어지면, 기본 폼 위젯이 표준 텍스트 필드 대신에 이러한 선택 가능한 항목을 가진 select box가 된다.


각 튜플의 첫 번째 요소는 모델에 설정될 실제 값이고, 두 번째 요소는 사람이 읽을 수 있는 이름이다.

일반적으로, 모델 클래스 안에 선택항목의 리스트를 정의하고 각 값을 위해 적절히 명명된 상수를 사용하는 것이 가장 좋다.

모델 클래스의 외부에서 선택항목 리스트를 정의하고 참조할 수 있지만, 선택항목의 리스트의 각 항목의 이름을 모델 클래스 안에서 정의하면 해당 정보를 사용하는 클래스와 모든 정보가 함께 유지되고 선택항목 리스트를 쉽게 참조할 수 있다(예: Student.SOPHOMORE는 Student 모델을 가져온 곳이라면 어디서든 사용할 수 있다).


또한 조직적인 목적을 위해 사용되는 명명된 그룹 안에 선택항목 리스트를 수집할 수 있다.

각 튜플에 첫 번째 요소는 그룹에 적용할 이름이다. 두 번째 요소는 반복 가능한 2-tuple 리스트다. 2-tuple에는 옵션의 값과 사람이 읽을 수 있는 이름이 있다. 그룹화됀 옵션은 비 그룹화 옵션 단일 리스트 안에 비 그룹화 옵션과 섞일 수 있다 (이 예제에서는 unknown 옵션 같은).


choices 집합을 가지고 있는 각 모델 필드에 대해, Django는 필드의 현재 값을 사람이 읽을 수 있는 이름으로 조회 가능한 메서드를 추가한다.


choices는 반복 가능한 객체가 될 수 있음에 주의해라. 리스트나 튜플일 필요는 없다. 객체를 통해 choices를 동적으로 구성할 수 있다. 하지만 동적으로 되기 위해 직접 choices를 조작한다면, 아마도 ForeignKey가 있는 적절한 데이터베이스 테이블을 사용하는 것이 낫다.

choices는 많은 변화가 없는 정적인 데이터를 의미한다.


필드에 기본값과 blank=False가 설정된 경우를 제외하면 "---------"가 포함된 레이블이 select box와 함께 렌더링 된다. 이런 방식을 재정의하기 위해서는, None을 포함한 choices 튜플을 추가한다. 예: (None, 'Your String For Display'). 양자택일로, CharField처럼 None 대신에 빈 문자를 사용할 수 있다.


db_column


Field.db_column


이 필드에 사용될 데이터베이스 칼럼의 이름. db_column이 주어지지 않으면, Django는 필드의 이름을 사용한다.


데이터베이스 칼럼 이름이 SQL 예약어, 또는 Python 변수 이름으로 허용되지 않는 문자를 포함하고 있어도 - 특히 하이픈 - 상관없다. Django가 뒤에서 칼럼과 테이블 이름을 인용("" 처리)한다.


db_index


Field.db_index


True면, 해당 필드를 위한 데이터베이스 인덱스가 생성된다.


db_tablespace


Field.db_tablespace


해당 필드가 인덱싱 되어있을 경우, 인덱스에 사용될 데이터베이스 테이블스페이스의 이름. 기본값은 프로젝트의 DEFAULT_INDEX_TABLESPACE 세팅이다. 모델의 db_tablespace이 있을 경우 이를 사용한다. 백엔드가 인덱스를 위한 테이블스페이스를 지원하지 않을 경우, 이 옵션은 무시된다.


default


Field.default


필드의 기본 값이다. default 값은 일반 값이나 callable 객체가 가능하다. callable이면 새로운 객체가 생성될 때마다 호출된다.


default값은 변경 가능한 객체가 될 수 없다 (모델 인스턴스, list, set, 기타 등등), 변경 가능한 객체가 모든 새로운 인스턴스에 기본 값으로서 참조되기 때문이다. 대신 원하는 기본값을 callable로 래핑 해라. 예를 들어, JSONFielddict 기본값 지정을 원한다면 다음 함수를 사용해라.

lambda는 migraions에 의해 직렬화 될 수 없으므로 default 같은 필드 옵션에 사용될 수 없다. 


모델 인스턴스에 매핑되는 ForeignKey 같은 필드의 경우 default 값은 모델 인스턴스 대신에 참조(to_field 설정을 제외하면 pk)하고 있는 필드의 값 이어야 한다.


default값은 새로운 모델 인스턴스가 생성될 때 필드에 의해 값이 제공되지 않을 때 사용된다. 필드가 기본 키 일 때는 필드에 None이 설정되었을 때 default가 사용된다.


editable


Field.editable


False일 경우 필드는 어드민이나 어떤 ModelForm에도 보이지 않는다. 또한 모델 유효성 검사에서도 제외된다. 기본값은 True다.


error_messages


Field.error_messages


error_message 인수는 필드에서 발생시키는 기본 메시지를 재정의할 수 있다. 재정의를 원한다면 에러 메시지와 매칭 되는 키를 포함한 딕셔너리를 전달해라. 


에러 메시지 키에는 null, blank, invalid, invalid_choice, unique, unique_for_date가 포함된다. 추가적인 에러 메시지 키는 Field types 섹션에 각 필드에 지정되어있다.


이러한 에러 메시지는 폼에 전파되지 않는 경우가 많다. Considerations regarding model's error_messages를 참고해라.


help_text


Field.help_text


추가 "help" 텍스트는 폼 위젯에 보인다. 필드가 폼에 사용되지 않는다 해도 문서화에 유용하다.


이 값은 자동으로 생성된 양식에서 HTML 이스케이프 처리되지 않음에 주의해라. 원한다면 help_text에 HTML을 포함시킬 수 있다.

일반 텍스트와 django.utils.html.escape()를 사용해서 HTML 특수 문자들을 이스케이프 처리할 수 있다.


primary_key


Field.primary_key


True일 경우 이 필드는 모델의 기본키다.


모델에 어떤 필드에도 prkmary_key=True를 지정하지 않으면, Django는 자동으로 기본키 저장을 위해 AutoField를 추가므로 기본 키 동작의 재정의가 필요 없을 경우 primary_key=True 설정이 필요 없다.


primary_key=Truenull=Falseunique=True를 함축한다. 기본키는 객체당 하나만 허용한다.


기본키 필드는 읽기 전용이다. 존재하는 객체의 기본키 값의 변경 후 저장한다면, 기존 객체가 유지된 채 새 객체가 생성된다.


unique


Field.unique


True면, 이 필드는 테이블을 통틀어서 유일해야 한다.


이는 데이터베이스 수준과 모델 유효성 검증에 의해 강제된다. unique 필드에 중복 값을 가진 모델의 저장을 시도하면, 모델의 save() 메서드에 의해 django.db.IntegrityError 가 발생된다.


unique 옵션은 ManyToManyFieldOneToOneField를 제외한 모든 필드 유형에 유효하다.


unique 옵션이 True일 때 인덱스 생성을 함축하고 있기 때문에 db_index지정이 필요 없음에 주의해라.


Changed in Django 1.11:

이전 버전에서 unique=TrueFileField에서 사용될 수 없다. 


unique_for_date


Field.unique_for_date


필드가 날짜 필드의 값마다 고유하기를 원한다면 해당 DateFieldDateTimeField의 이름으로 uniqu_for_date를 설정해라.


예를 들어, unique_for_date="pub_date" 옵션의 title 필드가 있다면, Django는 같은 titlepub_date를 가진 두 레코드의 점유를 허용하지 않는다.


만약 DateTimeField를 가리키게 설정한다면 필드의 날짜 부분만이 고려되는 점에 주의해라. 그 밖에 USE_TZTrue일 때는 객체가 저장될 때 설정된 current time zone을 사용해 unique_for_date를 체크한다.


모델 유효성 검증 중에 Model.validate_unique()에 의해 처리되지만 데이터베이스 수준에서 처리되는 것은 아니다. unique_for_date 제약과 관련된 ModelForm의 일부분이 아닌 어떤 필드(예를 들어, exclude에 나열된 또는 editable=False를 가진 필드 중 하나라면), Model.validate_unique()는 해당 특정 제약의 유효성 검증에서 스킵된다.


unique_for_month


Field.unique_for_month


unique_for_date와 비슷하지만 해당 필드는 월을 기준으로 필드가 고유해야 한다.


unique_for_year


Field.unique_for_year


unique_for_date, unique_for_month와 비슷하지만 해당 필드는 년을 기준으로 고유해야 한다.


verbose_name


Field.verbose_name


사람이 읽을 수 있는 필드의 이름이다. verbose name이 주어지지 않는다면, Django는 자동으로 필드의 속성 이름에서 밑줄을 공백으로 바꾼 값으로 생성한다.


validators


Field.validators


이 필드에 실행될 validator의 목록이다.


Registering and fetching lookups


필드는 조회 등록 API를 구현한다. API는 필드 클래스에 사용할 수 있는 조회와 필드에서 조회를 가져오는 방법을 사용자 정의하는 데 사용된다.



매거진의 이전글 Django Models
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari