Model field reference 기술적으로 모델은 django.db.models.fields에 정의되어 있다. 하지만 편의를 위해서 django.db.models에서 import해서 사용한다. 표준(standard convention) 또한 django.db.models에서 참조하도록 한다.



Field options

아래의 field options는 모든 field type에서 사용할 수 있다.

null

field.null

True면 django는 빈 값은 NULL로 데이터베이스에 저장한다.(Default = False)
CharFieldTextField 에서는 null을 피한다. 불필요하게 데이터없음에 대한 두 가지 값(null값, empty값)을 동시에 가질 수 있기 떄문이다. django표준은 null대신 빈문자열을 갖는 것이다.

예외!

한 가지 예외는 CharField에 unique = True와 blank = True가 설정된 경우이다. 이 경우 빈 값으로 여러 오브젝트를 저장할 때 고유 제한 조건 위반을 피하려면 null = True가 필요하다.

BooleanField 을 null로 처리하고 싶다면 NullBooleanField를 사용한다.



blank

Field.blank

blank = True 면 빈 값을 허용한다.(Default = False)

null과 blank의 차이점

null은 오직 데이터베이스에만 관련이있는 옵션이다. 하지만 blank는 유효성 검사와 연관되 있다.
만약 어떤 field에 blank = True가 선언되어 있다면 필수 필드가 되어 form validation 검사에서 빈 값을 입력 할 수 있다.



Choices

Field.Choices

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

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

모델 클래스 외부에서 choices 목록을 정의 한 후 참조 할 수 있지만 모델 클래스 내에 정의하면 해당 정보를 사용하는 클래스와 모든 정보가 유지되고 선택 사항을 쉽게 참조 가능하다.

Student.SOPHOMORE는 Student 모델을 가져온 곳이라면 어디에서나 사용할 수 있다.

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)



db_column

field.db_column

데이터베이스의 column 이름이 된다. 주어지지 않으면 django는 field의 이름을 사용한다.



db_index

######field.db_index

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



db_tablespace

Field.db_tablespace

오라클에 필요한 것 같다..pass



default

Field.default

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


siwon

$_$