recordingbetter's devlog

Python, Django, DRF, Postgresql, AWS, Docker....

Django Model Field Reference

05 June 2017


Field options

null

  • null = True일 경우, 해당 필드에 null을 허용한다.

blank

  • blank = True일 경우, 해당 필드에 blank를 허용한다.

choices

  • 실제 데이터 베이스에 저장되는 값과 사용자에게 보여줄 값을 다르게 할 수 있다.
from django.db import models

class Student(models.Model):
    YEAR_IN_SCHOOL_CHOICES = (
        ('FR', 'Freshman'),
        ('SO', 'Sophomore'),
        ('JR', 'Junior'),
        ('SR', '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

  • 데이터베이스의 컬럼의 이름. 생략되면 필드 이름을 사용한다.
  • 파이썬, SQL의 예약어 사용 불가

db_index

  • db_index = True 이면 이 필드에 대한 인덱스가 생성됨

db_tablespace

  • 필드 인덱스를 위한 테이블 공간의 이름

defalut

  • 필드의 기본 값. 새로운 객체가 생성될때마다 호출된다.
  • 변경 가능한 오브젝트 (모델 인스턴스, 목록, 세트 등) 일 수 없습니다.

editable

  • editable = False인 경우, admin이나 다른 ModelForm에서 보이지 않는다.
  • 모델 유효성 검사도 지나친다.
  • 기본값은 True

error_messages

  • error_messages 인수를 사용하면 필드에서 발생시키는 기본 메시지를 대체
  • 덮어 쓰려는 오류 메시지와 일치하는 키가 있는 딕셔너리를 전달해야 함.

help_text

  • 지정한 도움말이 보이게 한다.
  • html 포함 가능하다.
help_text="Please use the following format: <em>YYYY-MM-DD</em>."

primary_key

  • primary_key = True 일 경우 지정한 필드를 모델의 pk로 만든다.
  • 자동으로 정해주는 pk를 사용하지 않을 경우에 사용한다.
  • 자동으로 AutoField가 되고 null=False, unique=True가 적용된다.

unique

  • unique=True 일 경우, 해당 필드의 레코드는 유일한 값을 가져야 한다.
  • 레코드 저장 시, 유일한 값이 아닐 경우, IntegrityError 발생.

unique_for_date, unique_for_month, unique_for_year

  • DateField, DateTimeField에 날짜가 유일한 값이어야 하는 경우 사용.
  • title이라는 필드에 unique_for_date="pub_date" 옵션을 주면, 같은 title과 pub_date를 가진 레코드는 생성할 수 없다.

verbose_name

  • 필드에 사람이 읽기 좋은 이름을 붙이고 싶을때 사용.
  • verbose_name을 붙이지 않았을 경우, Django는 필드 이름에 언더스코어를 공백으로 바꾸어 자동으로 생성한다.

validators

  • 해당 필드의 유효성 검사를 위한 검사기 리스트

Field Types

AutoField

  • 숫자가 자동으로 늘어나는 정수필드. primary key

BigAutoField

  • 숫자가 자동으로 늘어나는 64bit 정수필드.

IntegerField

  • 정수인 숫자 필드
  • -2147483648 ~ 2147483647
  • localize = False일때 default form widget은 NumberInput, 아닐땐 TextInput

BigIntegerField

  • 큰 정수를 입력하기 위한 64bit 정수 필드
  • default form widget은 TextInput

SmallIntegerField

  • 적은 정수 필드
  • -32768 ~ 32767

PositiveIntegerField

  • 양의 정수 필드
  • 0 ~ 2147483647

PositiveSmallIntegerField

  • 양의 정수 필드 (적은 숫자)
  • 0 ~ 32767

DecimalField(max_digits=None, decimal_places=None, **options)

  • 고정 소숫점 숫자를 위한 필드.
  • Decimal 인스턴스
  • DecimalField.max_digits : 허용하는 최대 자릿수(소숫점 포함)
  • DecimalField.decimal_places : 소숫점 자릿수
  • localize = False일때 default form widget은 NumberInput, 아닐땐 TextInput

FloatField

  • 부동소숫점 숫자 필드
  • localize = False일때 default form widget은 NumberInput, 아닐땐 TextInput

CommaSeparatedIntegerField(max_length=None, **options)

  • ,로 나누어진 숫자 필드.
  • max_length를 정해줘야 한다.

BinaryField

  • 이진데이터 필드.
  • ModelForm에 포함시킬 수 없음. 파일 저장을 위한 필드가 아님

BooleanField

  • True/False 필드.
  • null을 허용하지 않음.
  • default form widget은 CheckboxInput

NullBooleanField

  • True/False 필드.
  • null을 허용하지 않음.

CharField

  • 문자열 필드
  • max_length를 정해줘야 한다.
  • default form widget은 TextInput
  • 긴 문자열은 TextField를 사용해야한다.

TextField(max_length=None, **options)

  • 큰 문자열 필드
  • default form widget은 Textarea

SlugField(max_length=50, **options)

  • 문자, 숫자, 언더스코어와 하이픈으로 이루어진 짥은 레이블
  • 주로 url에 사용한다.
  • allow_unicode = True 일때 유니코드 문자도 사용 가능

DateField(auto_now=False, auto_now_add=False, **options)

  • 날짜 필드.
  • datetime.date의 인스턴스
  • auto_now : 필드의 데이터가 저장(save)될때마다 오늘 날짜를 기록. (최종 수정날짜) QuerySet.update()은 오늘 날짜를 기록하지 않음.
  • auto_now_add : 레코드가 처음 기록될때 오늘 날짜를 기록한다. (생성 날짜) 데이터를 바꿀 수 없음.
  • default form widget은 TextInput

TimeField(auto_now=False, auto_now_add=False, **options)

  • 시간 필드
  • datetime.time의 인스턴스
  • DateField와 동일하다.

DateTimeField(auto_now=False, auto_now_add=False, **options)

  • 타임스탬프 필드
  • datetime.datetime의 인스턴스
  • DateField와 동일하다.

DurationField

  • 데이터 저장 주기 필드

EmailField(max_length=254, **options)

  • 데이터 입력 형태가 email 형태인지 검사해주는 CharField

ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)

  • 이미지를 위한 FileField
  • 가로, 세로 옵션이 필요하다.
  • default form widget은 ClearableFileInput

GenericIPAddressField(protocol=’both’, unpack_ipv4=False, **options)

  • IPv4 또느 IPv6의 입력을 위한 필드

UUIDField

  • universally unique identifier 필드
  • pk 처럼 사용할 수 있다.
import uuid
from django.db import models

class MyUUIDModel(models.Model):
	# UUID 인스턴스가 아니라 호출 가능 객체 (괄호 생략)가 기본값으로 전달
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

관계 필드

ForeignKey(othermodel, on_delete, **options)

  • 일대다 관계에서 자식필드가 부모 필드의 PK값을 가지는 필드
  • ricursive 관계에서는 models.ForeignKey('self', on_delete=models.CASCADE) 사용.
  • models.py 파일의 코드에서 부모 모델이 자식의 아래쪽에 올때에는 부모클래스를 따옴표로 묶인 문자열로 정의한다.

ManyToMany(othermodel, **options)

  • 다대다 관계에서 상대 모델을 표시
  • 중간 테이블을 생성한다.

OneToOne(othermodel, on_delete, parent_link=False, **options)

  • 일대일 관계. ForeignKey와 비슷하지만 관계를 반대로 봤을때 1개의 객체만 반환한다.
  • 어떤 모델을 확장할때 유용하다.
  • 다른 모델을 불러와서 사용 가능
blog comments powered by Disqus