Model Field 1

Model field reference

Django가 제공하는 필드 옵션과 필드 유형을 포함하여 필드의 모든 API 참조를 포함 합니다

Field options

다음 인수들은 모든 필드 유형에서 사용할 수 있습니다

null

field.null

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

문자열 기반 필드가 null = True이면 ‘no data’의 두 가지 값이 가능하다
:NULL, 그리고 빈 스트링 ''

대부분의 경우 ‘데이터 없음’에 대해 가능한 두 가지 값을 갖는 것은 불필요합니다. Django 규칙은 NULL이 아닌 빈 문자열을 사용하는 것입니다.

한 가지 예외는 CharFieldunique = Trueblank = True가 설정된 경우입니다. null = 빈 값으로 여러 객체를 저장할 때 고유 제한 조건 위반을 피하려면 True가 필요합니다.

이 경우 빈 값으로 여러 오브젝트를 저장할 때 고유 제한 조건 위반을 피하려면 null = True가 필요합니다.

문자열 기반 및 비 문자열 기반 필드의 경우 null 매개 변수가 데이터베이스 저장소에만 영향을 주기 때문에 양식에서 빈 값을 허용하려면 blank = True로 설정해야합니다.

blank

Field.blank

True이면 필드는 비워 둘 수 있습니다. 기본값은 False입니다.

blanknull과 다릅니다. null은 순전히 데이터베이스와 관련된 반면 blank는 유효성 검사와 관련이 있습니다. 필드에 blank = True가 있으면 폼 유효성 검사에서 빈 값을 입력 할 수 있습니다. 필드에 blank = False가 있으면 필드가 필요합니다.

Choices

Field.choices

순회가능한 (예: list 와 tuple)로 이루어진 정확히 두 항목 (예 : [(A, B), (A, B) …])의 반복 가능한 항목은 이 표준 텍스트 필드의 choices 항목으로 사용합니다.

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

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
)

일반적으로 모델 클래스 내에서 선택 사항을 정의하고 각 값에 대해 적절히 명명 된 상수를 정의하는 것이 가장 좋습니다.

from django.db import models

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

모델 클래스 외부에서 선택 목록을 정의한 다음 참조 할 수는 있지만 모델 클래스 내의 각 선택 항목에 대한 선택 사항과 이름을 정의하면 해당 정보를 사용하는 클래스와 모든 정보가 유지되고 선택 사항을 쉽게 참조 할 수 있습니다. 조직 목적으로 사용할 수있는 명명 된 그룹으로 사용 가능한 선택 사항을 수집 할 수도 있습니다.

MEDIA_CHOICES = (
    ('Audio', (
            ('vinyl', 'Vinyl'),
            ('cd', 'CD'),
        )
    ),
    ('Video', (
            ('vhs', 'VHS Tape'),
            ('dvd', 'DVD'),
        )
    ),
    ('unknown', 'Unknown'),
)

각 튜플의 첫 번째 요소는 그룹에 적용 할 이름입니다. 두 번째 요소는 2- 튜플의 반복 가능이며 각 2- 튜플에는 옵션에 대한 값과 사람이 읽을 수있는 이름이 들어 있습니다. 그룹화 된 옵션은 단일 리스트 내의 그룹화되지 않은 옵션과 결합 될 수 있습니다.

Django는 choices set이 있는 각 모델 필드에 대해 필드의 현재 값에 대한 사람이 읽을 수 있는 이름을 검색하는 ‘get_FOO_display()‘메소드를 추가합니다

선택 사항은 모든 반복 가능한 객체 일 수 있습니다. 반드시 목록 또는 튜플 일 필요는 없습니다. 그러나 스스로 동적인 choices를 해킹하는 경우, ForeignKey를 사용하여 적절한 데이터베이스 테이블을 사용하는 것이 더 나을 것입니다.

blank=False 기본값과 함께 field에 설정되어 있지 않으면 ”——–“가 포함된 레이블이 select box와 함께 렌더링 됩니다. 이 동작을 무시하려면 None을 포함하는 choice 튜플에 추가 한다. 그렇지 않으면, None 대신에 빈 문자열을 Charfeild와 같이 적절한 곳에서 사용할 수 있다.

db_column

Field.db_column

이 필드에 사용할 데이터베이스 column의 이름이 주어지지 않으면 장고는 필드의 이름을 사용합니다.

데이터베이스 column 이름이 SQL 예약어이거나 Python 변수 이름에서 허용되지 않는 문자를 포함하면 - 하이픈- 은 괜찮다. Django는 뒤에서 열과 테이블 이름을 인용합니다.

db_index

Field.db_index

True이면 이 필드에 대해 데이터베이스 인덱스가 생성됩니다.

db_tablespace

Field.db_tablespace

이 필드의 색인이 작성된 경우,이 필드의 색인에 사용할 database tablespace의 이름. 그 기본값은 프로젝트의 DEFAULT_INDEX_TABLESPACE 설정 (설정된 경우) 또는 모델의 db_tablespace (있는 경우)입니다. 백엔드가 인덱스의 테이블 공간을 지원하지 않으면 이 옵션은 무시됩니다.

default

Field.default

필드의 기본값입니다. 값 또는 호출 가능 객체 일 수 있습니다. 호출 가능하면 새로운 객체가 생성 될 때마다 호출됩니다.

기본값은 변경 가능한 객체 (model instance, list, set 등) 일 수 없습니다. 해당 객체의 동일한 인스턴스에 대한 참조가 모든 새 모델 인스턴스의 기본값으로 사용됩니다.

대신 원하는 기본값을 호출 가능 코드로 래핑하십시오. 예를 들어, JSONField의 기본 dict를 지정하려면 다음 함수를 사용하십시오.

def contact_default():
    return {"email": "to1@example.com"}

contact_info = JSONField("ContactInfo", default=contact_default)

lambdamigration에 의해 직렬화 될 수 없기 때문에 default와 같은 field options에 사용할 수 없습니다.

모델 인스턴스에 매핑되는 ForeignKey와 같은 필드의 경우, 기본값은 모델 인스턴스 대신 참조하는 필드 값 (to_field가 설정되지 않은 경우 pk)이여야합니다.

기본값은 새 모델 인스턴스가 만들어지고 값이 필드에 제공되지 않을 때 사용됩니다. 필드가 primary key인 경우, 그 기본값 또한 field는 None으로 설정 되었을 때 사용됩니다.

editable

Field.editable

False 인 경우 필드는 관리자 또는 다른 ModelForm에 표시되지 않습니다. 또한 모델 유효성 검사 도중 건너 뜁니다. 기본값은 True입니다.

error_messages

Field.error_messages

error_messages 인수를 사용하면 필드에서 발생시키는 기본 메시지를 대체 할 수 있습니다. 덮어 쓰려는 오류 메시지와 일치하는 키가 있는 dictionary을 전달하십시오.

오류 메시지 키에는 null, blank, invalid, invalid_choice, uniqueunique_for_date가 포함됩니다. 추가 오류 메시지 키는 아래 필드 유형 섹션의 각 필드에 지정됩니다.

model’s error_messages 에 대해 고려해야 할 것

form field 레벨 또는 form Meta 레벨에서 정의 된 오류 메시지는 항상 model field 레벨에 정의 된 오류 메시지보다 우선합니다.

NON_FIELD_ERRORS 키를 ModelForm 내부 메타 클래스의 error_messages dictionary에 추가하여 모델 유효성 검사로 발생한 NON_FIELD_ERRORS에서 오류 메시지를 무시할 수 있습니다.

from django.forms import ModelForm
from django.core.exceptions import NON_FIELD_ERRORS

class ArticleForm(ModelForm):
    class Meta:
        error_messages = {
            NON_FIELD_ERRORS: {
                'unique_together': "%(model_name)s's %(field_labels)s are not unique.",
            }
        }
        

help_text

Field.help_text

form 위젯과 함께 표시되는 추가 ‘help’텍스트는 field가 from을 사용하지 않아도 문서화 하는데 편리하다.

이 값은 자동 생성 양식에서 HTML 이스케이프 처리되지 않습니다. 원하는 경우 help_text에 HTML을 포함시킬 수 있습니다. 예 :

help_text="Please use the following format: <em>YYYY-MM-DD</em>."

또한 일반 텍스트와 django.utils.html.escape ()를 사용하여 HTML 특수 문자를 이스케이프 처리 할 수 있습니다.

cross-site 스크립팅 공격을 피하기 위해 신뢰할 수 없는 사용자로부터 온 도움말 텍스트를 이스케이프해야합니다.

primary_key

Field.primary_key

Primary_key=True이면 이 필드는 모델의 기본 키입니다.

모델의 모든 필드에 대해 primary_key = True를 지정하지 않으면 Django는 기본 키를 보유 할 자동 필드를 자동으로 추가합니다. 기본 기본 키 동작을 덮어 쓰지 않으려면 모든 필드에서 primary_key = True**를 설정할 필요가 없습니다.

primary_key = Truenull = Falseunique = True를 의미합니다. 하나의 기본 키만 객체에 허용됩니다.

기본 키 필드는 읽기 전용입니다. 기존 개체의 기본 키 값을 변경 한 다음 저장하면 이전 개체와 함께 새 개체가 만들어집니다.

unique

Field.unique

unique=True, 이 필드는 테이블 전체에서 고유해야합니다.

이는 데이터베이스 레벨 및 모델 검증에 의해 시행됩니다. 고유 한 필드에 중복 값이 있는 모델을 저장하려고하면 모델의 save () 메소드에 의해 django.db.IntegrityError가 발생합니다.

이 옵션은 ManyToManyFieldOneToOneField를 제외한 모든 필드 유형에 유효합니다.

unique=True 일 때 unique은 인덱스 생성을 의미하기 때문에 db_index를 지정할 필요가 없습니다.

unique_for_date

Field.unique_for_date

이것을 DateField 또는 DateTimeField의 이름으로 설정하여이 필드가 날짜 필드의 값에 대해 고유해야합니다.

예를 들어, unique_for_date = ‘pub_date’인 필드 제목이 있으면 Django는 같은 제목과 pub_date를 가진 두 개의 레코드를 입력 할 수 없습니다.

DateTimeField를 가리 키도록 설정하면 필드의 날짜 부분 만 고려됩니다. 게다가 USE_TZ=True 일 때, 객체가 저장 될 때 현재 시간대에서 검사가 수행됩니다.

unique_for_month

Field.unique_for_month

unique_for_date와 비슷하지만 해당 달에 대해 필드가 고유해야합니다.

unique_for_year

Field.unique_for_year

unique_for_dateunique_for_month와 같습니다.

verbose_name

Field.verbose_name

사람이 읽을 수 있는 필드 이름, 자세한 이름이 주어지지 않으면 Django는 필드의 속성 이름을 사용하여 밑줄을 공백으로 변환하여 자동으로 생성합니다.

Verbose field names

이 예제에서 verbose name은 ‘person ‘s first name’입니다.

first_name = models.CharField("person's first name", max_length=30)

이 예제에서, verbose name은 “first name”이다.:

first_name = models.CharField(max_length=30)

ForeignKey, ManyToManyField 및 OneToOneField에는 첫 번째 인수가 모델 클래스가되어야하므로 verbose_name 키워드 인수를 사용하십시오.

poll = models.ForeignKey(
    Poll,
    on_delete=models.CASCADE,
    verbose_name="the related poll",
)
sites = models.ManyToManyField(Site, verbose_name="list of sites")
place = models.OneToOneField(
    Place,
    on_delete=models.CASCADE,
    verbose_name="related place",
)

verbose_name의 첫 문자를 대문자로 사용하지 않습니다. Django는 필요한 첫 문자를 자동으로 대문자로 표시합니다.

validators

Field.validators

이 필드에 실행할 검사기 목록입니다. 자세한 내용은 validators 설명서를 참조하십시오.

필드는 lookup registration API 를 구현합니다. API를 사용하여 필드 클래스에 사용할 수있는 조회와 필드에서 조회를 가져 오는 방법을 사용자 정의 할 수 있습니다.

validator(유효성 검사기)는 값을 가져 와서 일부 조건을 충족시키지 않으면 ValidationError를 발생시키는 호출 가능 함수입니다. 유효성 검사기는 다른 유형의 필드간에 유효성 검사 논리를 다시 사용하는 데 유용 할 수 있습니다. 예를 들어, 짝수 만 허용하는 유효성 검사기는 다음과 같습니다.

from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(
            _('%(value)s is not an even number'),
            params={'value': value},
        )

필드의 validators argument를 통해 모델 필드에 추가 할 수 있습니다.

from django.db import models

class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])

validators가 실행되기 전에 값이 Python으로 변환되기 때문에 form과 동일한 validators를 사용할 수도 있습니다.

from django import forms

class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])

더 복잡하거나 구성 가능한 유효성 검사기에 __call __ () 메서드가있는 클래스를 사용할 수도 있습니다. 예를 들어, RegexValidator는 이 기술을 사용합니다. 클래스 기반 유효성 검사기가 유효성 검사기 모델 필드 옵션에서 사용되는 경우 deconstruct()__eq __ () 메서드를 추가하여 마이그레이션 프레임 워크에서 해당 클래스를 직렬화 할 수 있는지 확인해야합니다.

Field types

AutoField

class AutoField (** options)

사용 가능한 ID에 따라 자동으로 증가하는 IntegerField. [source:link] 보통 이것을 직접 사용할 필요는 없습니다. 별도로 지정하지 않으면 기본 키 필드가 자동으로 모델에 추가됩니다. (Automatic primary key fields)

id = models.AutoField(primary_key=True)

BigAutoField

New in Django 1.10

1에서 9223372036854775807까지의 숫자에 맞도록 보장된다는 점을 제외하고는 AutoField와 매우 유사한 64 비트 정수입니다.

BigIntegerField

-9223372036854775808에서 9223372036854775807까지의 숫자를 맞출 수 있다는 것을 제외하고는 IntegerField와 매우 흡사 한 64 비트 정수입니다.이 필드의 기본 양식 위젯은 TextInput입니다.

BinaryField

원 이진 데이터를 저장하는 필드입니다. 바이트 할당 만 지원합니다. 이 입력란에는 기능이 제한되어 있습니다. 예를 들어, BinaryField 값에 대한 쿼리 집합을 필터링 할 수 없습니다. 또한 BinaryField를 ModelForm에 포함시키는 것도 불가능합니다.

note: BinaryField의 악용 데이터베이스에 파일을 저장하는 것에 대해 생각할 수도 있지만, 99 %의 경우에는 잘못된 디자인이라고 생각하십시오. 이 필드는 적절한 정적 파일 처리를 대체하지 않습니다.

BooleanField

true / false 필드.

이 필드의 기본 양식 위젯은 CheckboxInput입니다.

null 값을 받아 들일 필요가 있다면 대신 NullBooleanField를 사용하십시오.

Field.default가 정의되어 있지 않으면 BooleanField의 기본값은 None입니다.

CharField

class CharField (max_length = None, ** options) [[source]]

작은 문자열에서 큰 문자열까지의 문자열 필드.

대량의 텍스트의 경우 TextField를 사용하십시오.

이 필드의 기본 양식 위젯은 TextInput입니다.

CharField에는 하나의 추가 인수가 필요합니다 :

CharField.max_length

필드의 최대 길이 (문자 수)입니다. max_length는 데이터베이스 레벨과 Django의 유효성 검사에서 적용됩니다.

CommaSeparatedIntegerField

버전 1.9부터는 사용되지 않습니다 : 
이 필드는 CharField와 함께 validators = [validate_comma_separated_integer_list]와 함께 사용되지 않습니다.

정수 필드는 쉼표로 구분됩니다. CharField와 마찬가지로 max_length 인수가 필요하며 여기에 언급 된 데이터베이스 휴대성에 대한 참고 사항을 주의해야합니다.

DateField

class DateField(auto_now=False, auto_now_add=False, **options)[source]

Python에서 datetime.date 인스턴스로 표현되는 날짜입니다. 추가로 몇 가지 선택적 인수가 있습니다.

DateField.auto_now

개체가 저장 될 때마다 now every time을 필드에 자동으로 설정합니다. ‘last-modified’타임 스탬프에 유용합니다. Note that the current date는 항상 사용됩니다. 재정의 할 수있는 기본값이 아닙니다.

이 필드는 Model.save () 를 호출 할 때 자동으로 업데이트됩니다. 이 필드는 QuerySet.update() 와 같은 다른 방법으로 다른 필드를 업데이트 할 때 업데이트되지 않지만 이와 같은 업데이트에서 필드의 사용자 지정 값을 지정할 수는 있습니다.

DateField.auto_now_add

객체가 처음 생성 될 때 자동으로 필드를 현재로 설정합니다. 타임 스탬프 생성에 유용합니다. 현재 날짜는 항상 사용됩니다. 재정의 할 수있는 기본값이 아닙니다. 따라서 객체를 만들 때이 필드의 값을 설정하더라도 무시됩니다. 이 필드를 수정하려면 auto_now_add = True 대신 다음을 설정하십시오.

  • For DateField: default=date.today - from datetime.date.today()
  • For DateTimeField: default=timezone.now - from django.utils.timezone.now()

이 필드의 기본 양식 위젯은 TextInput 입니다. 관리자는 JavaScript 캘린더와 ‘Today’에 대한 바로 가기를 추가합니다. invalid_date 오류 메시지 키가 추가로 포함됩니다.

auto_now_add, auto_nowdefault 옵션은 상호 배타적입니다. 이러한 옵션을 함께 사용하면 오류가 발생합니다.

Note: 현재 구현 된 것처럼 auto_now 또는 auto_now_addTrue로 설정하면 필드의 editable=Falsblank=True로 설정됩니다.

Note: auto_nowauto_now_add 옵션은 생성 또는 업데이트 할 때 항상 기본 시간대의 날짜를 사용합니다. 다른 것이 필요한 경우 auto_now 또는 auto_now_add를 사용하는 대신 자신의 호출 가능 기본값을 사용하거나 save () 를 재정의하는 것이 좋습니다. 또는 DateField 대신 DateTimeField를 사용하고 표시 시간에 datetime에서 date 로 변환 처리하는 방법을 결정할 수 있습니다.

DateTimeField

날짜와 시간. 파이썬에서 datetime.datetime 인스턴스로 표현됩니다. DateField 와 동일한 추가 인수를 사용합니다.

이 필드의 기본 양식 위젯은 단일 TextInput 입니다. 관리자는 JavaScript shortcuts에 있는 두 개의 별도 TextInput 위젯을 사용합니다.

DecimalField

고정 소수점 이하의 십진수로 파이썬에서 Decimal 인스턴스로 표현됩니다. 두 개의 required arguments가 있습니다.

DecimalField.max_digits

숫자에 허용되는 최대 자릿수입니다. 이 수는 decimal_places보다 크거나 같아야합니다.

DecimalField.decimal_places

숫자와 함께 저장할 소수점 이하 자릿수.

예를 들어 소수점 이하 두 자리의 해상도로 999까지의 숫자를 저장하려면 다음을 사용하십시오.

models.DecimalField(..., max_digits=5, decimal_places=2)

소수점 이하 10 자리의 해상도로 약 10 억 개의 숫자 저장 :

models.DecimalField(..., max_digits=19, decimal_places=10)

이 필드의 기본 양식 위젯은 localizeFalse 일 때 NumberInput 이고 그렇지 않으면 TextInput 입니다.

Note: FloatField 및 DecimalField 클래스 간의 차이점에 대한 자세한 내용은 FloatField vs DecimalField를 참조하십시오.

DurationField

class DurationField (** options) [source]

시간 구간을 저장하는 필드. 파이썬에서 timedelta로 모델링됩니다. PostgreSQL에서 사용되는 데이터 유형 간격이며 Oracle에서는 데이터 유형이 INTERVAL DAY (9) TO SECOND (6) 입니다. 그렇지 않으면 microseconds의 bigint가 사용됩니다.

Note : DurationField를 사용한 산술은 대부분의 경우에 작동합니다. 그러나 PostgreSQL 이외의 모든 데이터베이스에서 DurationField의 값을 DateTimeField의 산술 인스턴스와 비교하는 것은 예상대로 작동하지 않습니다.

EmailField

값이 유효한 전자 메일 주소인지 확인하는 CharField EmailValidator를 사용하여 입력의 유효성을 검사합니다.