Field 종류
일반 Field
•
AutoField : 자동으로 증가하는 IntegerField이다. 기본키 필드를 추가할 때 주로 사용한다.
•
SmallAutoField : 1 ~ 32767 값 저장 가능한 AutoField이다.
•
BigAutoField : 1 ~ 9223372036854775807 값 저장 가능한 AutoField이다.
•
IntegerField : -2147483648 ~ 2147483647 값 가능 저장 필드
•
SmallIntegerField : 0 ~ 32767 값 저장 필드
•
BigIntegerField : -9223372036854775808 ~ 9223372036854775807 값 저장 필드
•
BinaryField : 바이너리 값을 저장하는 필드, Binary 값에 쿼리셋을 필터링할 수 없기 때문에 제한된 기능만 사용 가능하다.
•
BooleanField : True / False 값을 저장하는 필드
•
FloatField : 부동소숫점 숫자 값을 저장하는 필드 (python의 Float 인스턴스)
•
DecimalField : 고정소숫점을 데이터로 가지는 필드 (python의 Decimal 인스턴스)
인자 이름 | 기능 | 값 형식 |
max_digits | 소숫점 최대 자리수 | 0보다 큰 정수 |
decimal_places | 숫자 저장 시 함께 저장되는 소숫점 자리수 | 0보다 큰 정수 |
•
CharField : 문자열을 저장하는 필드
인자 이름 | 기능 | 값 형식 |
max_length | 최대 저장 가능한 문자열 길이 | 0보다 큰 정수 |
•
TextField : 많은 양의 문자열을 저장하는 필드
•
•
URLField : URL 문자열 값을 저장하는 필드
인자 이름 | 기능 | 값 형식 |
max_length | 최대 URL 문자열 길이
기본 값은 200 | 0보다 큰 정수 |
•
UUIDField : UUID 데이터 유형 값을 저장하는 필드
•
DateField : 날짜와 시간을 저장하는 필드, datetime.datetime 인스턴스에 의해 표현된다.
인자 이름 | 기능 | 값 형식 |
auto_now | 데이터 저장 시 마다 현재 시간 저장 여부 | Boolean |
auto_now_add | 데이터 최초 생성 시 현재 시간 저장 여부 | Boolean |
•
TimeField : 시간을 저장하는 필드, datetime.time 인스턴스에 의해 표현된다.
DateField와 동일한 옵션 사용
•
DateField : 날짜를 저장하는 필드, datetime.date 인스턴스에 의해 표현된다.
DateField와 동일한 옵션 사용
•
DurationField : 날짜 사이의 기간을 저장하는 필드, datetime.timedelta 인스턴스에 의해 표현된다.
•
FileField : 파일 업로드 필드
기본 FileSystemStorage를 사용하면 저장되는 로컬 파일 시스템 위치가 MEDIA_ROOT 경로로 추가된다.
인자 이름 | 기능 | 값 형식 |
upload_to | 업로드 될 디렉터리 / 파일 이름 | - 문자열
- strftime() 형식이 포함된 문자열 (uploads/%Y/%m/%d)
- instance(해당 파일에 붙는 특별한 값), filename(원본 파일에 주어진 이름) 이 두가지를 인자로 받으며, Unix 스타일의 슬래시가 포함된 값을 리턴하는 함수 (예시) |
storage | 파일의 저장 및 검색을 처리하는 storage 개체 | FileSystemStorage 객체, 또는 FileSystemStorage 객체를 사용한 함수 |
함수를 upload_to 값으로 설정하는 예시
storage 옵션 설정 예시
FileFIeld 모델을 사용한 인스턴스에서 사용되는 메소드 [수정 중...]
•
ImageField : 이미지를 저장하는 필드
FileField에서 모든 특성 및 메서드를 상속할 뿐 아니라 업로드된 개체가 유효한 이미지인지 확인합니다.
또한 사용을 위해 Pillow 라이브러리 설치가 필요합니다. (pip install pillow)
인자 이름 | 기능 | 값 형식 |
height_field | 이미지 저장 시, 높이를 자동으로 채워주는지 여부
기본 값 None | 0보다 큰 숫자 |
width_field | 이미지 저장 시, 너비를 자동으로 채워주는지 여부
기본 값 None | 0보다 큰 숫자 |
•
FIlePathField : 파일 경로를 저장하는 필드
allow_files 나 allow_folders 둘 중 하나는 반드시 True 이어야 한다.
인자 이름 | 기능 | 값 형식 |
path | FilePathField가 사용하는 파일 시스템 절대 경로 | 문자열 (EX: /home/images) |
match | 파일 이름 필터링 시 사용할 정규식이다.
기본 파일 이름에만 적용된다. | 문자열 (EX: foo.*\.txt$) |
recursive | path 값의 모든 하위 디렉터리가 포함하는지 여부
기본 값은 False | Boolean |
allow_files | 지정된 위치의 파일을 포함하는지 여부
기본 값은 True | Boolean |
allow_folders | 지정한 위치의 폴더를 포함할지 여부
기본 값은 True | Boolean |
•
GenericIPAddressField : 문자열 형식의 IPv4 또는 IPv6 주소
인자 이름 | 기능 | 값 형식 |
protocol | 허용되는 형식을 설정한다.
기본 값은 both | 문자열 IPv4, IPv6, both 중 하나 선택 |
unpack_ipv4 | ::ffff:192.0.2.1과 같은 IPv4 매핑된 주소의 압축을 푼다.
protocol 옵션 값이 both 값으로 설정되어야만 사용 가능하다.
기본 값은 false | Boolean |
•
JSONField : JSON 인코딩 값을 저장하는 필드
JSONField는 PostgreSQL, SQLite, MariaDB 10.2.7+, MySQL 5.7.8+, Oracle에서 지원됩니다.
인자 이름 | 기능 | 값 형식 |
encoder | json 인코딩 값을 직렬화하는 인코더
기본 값은 json.JSONEncoder | DjangoJSONEncoder를 사용한 클래스 |
decoder | json 값을 역직렬화하는 디코더
기본 값은 json.JSONDecoder | Boolean |
•
SlugField : 슬러그를 저장하는 필드
슬러그는 신문에서 사용하는 용어로, 무언가의 짧은 라벨을 나타낸다. 주로 기존의 데이터를 이용하여 유효한 URL을 만드는데 사용한다.
슬러그를 만들때는 문자, 숫자, 밑줄 또는 하이픈(_)만 사용한다.
인자 이름 | 기능 | 값 형식 |
max_length | 최대 슬러그의 길이
기본 값은 50 | 0보다 큰 정수 |
allow_unicode | 슬러그 값의 ASCII 문자 외의 유니코드 사용 가능 여부
기본 값은 False | Boolean |
관계형 Field
•
ForeignKey : 모델의 1:N(일대다) 관계를 사용하기 위한 ForeignKey를 사용하는 필드
인자 이름 | 기능 | 값 형식 |
to | 관계를 설정하려는 모델
* ‘self’ 를 사용하면, 재귀로 참조가 가능하다.
* 아직 정의된 모델과의 관계를 작성하기 위해서는 모델 개체 자체가 아닌 이름으로 사용도 가능하다. | parent Model 개체 |
on_delete | - models.cascade : SQL의 ON DELETE CASCADE와 동일하다. 연결된 객체와 ForeignKey 객체가 같이 삭제된다.
- models.protect : ForeignKey 객체는 삭제되지 않도록 ProtectedError 를 발생시켜 보호한다.
- models.set_null : ForeignKey 객체값을 NULL로 설정한다.
- models.set_default : ForeignKey 객체값을 default 값으로 설정한다.
- models.set() : set에 설정된 함수를 사용하여 설정한다.
- models.do_nothing : 아무런 행동을 하지 않는다. 참조 무결성을 해칠 수 있기 때문에 사용은 추천하지 않는다. | |
limit_choices_to | ModelForm이나 admin 사용 시, 사용 가능한 선택지를 제한한다. (기본적으로는 쿼리 셋의 모든 객체를 선택할 수 있다.)
* EX) limit_choices_to={'is_staff': True} : is_staff 필드의 값이 True인 객체만 선택을 가능 | 딕셔너리 값, Q 개체 또는 사전 또는 Q 개체를 반환하는 호출 가능 개체 중 하나를 사용할 수 있다. |
related_name | 1:N 관계 / M:N 관계에 있는 두 모델(A:B)에서 A모델 인스턴스와 관련된 B모델의 객체를 얻기위해 사용하는 이름이다.
즉, ORM에서 관련 개체(A)에서 현재 개체(B)의 사용할 수 있도록 이름을 연결다리로 설정하는 것이다.
* ORM에서 연결된 쿼리셋을 반환받기 위해 사용한다.
* Django가 역방향 관계를 만들지 않도록 하려면 ‘+’ 값을 사용한다.
* 필드와 동일한 이름을 사용하면 안된다. | 문자열 |
related_query_name | 1:N 관계 / M:N 관계에 있는 두 모델(A:B)에서 A모델 인스턴스와 관련된 B모델의 객체를 얻기위해 사용하는 이름이다.
즉, ORM에서 관련 개체(A)에서 현재 개체(B)의 사용할 수 있도록 이름을 연결다리로 설정하는 것이다.
* 쿼리 필터링에서 사용할 수 있다.
* related_query_name 미 지정시 related_name이 기본 값이다.
* 필드와 동일한 이름을 사용하면 안된다. | 문자열 |
to_field | PK 아닌 필드 값으로 1:N 관계를 설정하기 위해 사용한다.
* 해당 옵션을 사용하는 필드는 반드시 unique=TRUE 이어야한다. | |
db_constraint | 참조 무결성 체크 여부
* 기본 값은 True | Boolean |
•
ManyToManyField : 모델의 N:M(다대다) 관계를 사용하기 위한 ForeignKey를 사용하는 필드
ForeignKey의 인자를 대부분 공통으로 사용한다.
•
OneToOneField : 모델의 1:1 (일대일) 관계를 사용하기 위한 ForeignKey를 사용하는 필드
ForeignKey의 인자를 대부분 공통으로 사용한다.
Field 공통 옵션 종류
옵션 이름 | 기능 | 기본 값 | 값 형식 |
Field.null | Null 값 허용 여부 설정 | False | Boolean |
Field.blank | 공백 값 허용 여부 설정 | False | Boolean |
Field.db_column | DB 테이블에 저장될 컬럼의 이름 설정
미 설정 시, _id 접두사가 붙는 이름으로 설정된다. | 문자열 | |
Field.db_index | 해당 필드의 index 설정 여부 설정 | 사용 시 True | |
Field.default | 해당 필드 값의 기본 값 설정 | 각 필드의 정해진 값 | |
Field.editable | 해당 필드를 admin이나 다른 ModelForm에서 표시할 것인지 여부 | True | Boolean |
Field.error_messages | null, blank, invalid, invalid_choice, unique_for_date가 포함된 error_messages 값 | ||
Field.help_text | 해당 필드의 입력 도움말 값 | 문자열 | |
Field.primary_key | 해당 필드를 primary_key 로 사용할지 여부
* primary_key로 사용되는 필드는 null=False & unique=True 가 동시 적용된다.
또한, 한 오브젝트의 primary_key는 한 필드만 사용 가능하며 읽기 전용으로 사용한다. | 사용 시 True | |
Field.unique | 이 필드의 값은 테이블에서 고유해야 되는지 여부 | 사용 시 True | |
Field.unique_for_date | DateField, DateTimeField 에서 사용하는 옵션이다.
해당 필드 값의 날짜 값이 고유해야 되는지 여부 | 사용 시 True | |
Field.unique_for_month | DateField, DateTimeField 에서 사용하는 옵션이다.
해당 날짜 필드 값의 월(Month) 값이 고유해야 되는지 여부 | 사용 시 True | |
Field.unique_for_year | DateField, DateTimeField 에서 사용하는 옵션이다.
해당 날짜 필드 값의 연(year) 값이 고유해야 되는지 여부 | 사용 시 True | |
Field.verbose_name | Admin 페이지 등에서 필드를 조회할 때, 필드 조회가 쉽도록 유저가 붙어주는 이름 | 문자열 | |
Field.validators | 해당 필드의 제약조건을 설정하는 것
제약 조건을 커스텀해서 만들거나, Django에서 기본적으로 지원하는 함수를 사용해도 된다.
- 예시
https://docs.djangoproject.com/ko/4.0/ref/validators/ | List |