Django - field type

양희연·2020년 6월 14일
0

Django

목록 보기
3/14
post-thumbnail

📌 Field Option

null

기본값은 False

💡 CharField와 TextField 같은 문자열 기반 필드에는 null을 사용하지 않는다.
null=True 로 정의하면 '데이터 없음'에 대한 두가지 값 즉, None과 빈 문자열을 갖게 된다.
이는 중복으로 장고 컨벤션은 null이 아닌 빈 문자열을 사용한다. blank = True

blank

기본값은 False

💡null과 blank

    null은 데이터베이스와 관련이 있다. 데이터베이스 column이 null 값을 가질지를 정의한다.
    blank는 validation(유효성) 관련이다.

default

필드의 기본값을 지정해준다.

primary_key

primary_key = True면 해당 필드를 기본키로 설정한다.
기본키를 설정하지 않으면 자동적으로 고유한 정수값을 가지는 id 기본키 필드가 생성된다.

unique

unique = True면 필드가 항상 고유한 값만 가지도록 설정한다.
동일한 값을 생성하려고 할 경우 IntegrityError 가 발생한다.
ManyToManyFieldOneToOneField에는 사용할 수 없다.



⛓ Relationship Fields

> ForeignKey

필드를 외래키로 설정한다.
관계 설정 대상이 되는 모델과 참조하는 객체가 삭제 시 처리 방식을 필수로 설정해줘야 한다.

자기 참조의 경우 self 지정

ForeignKey(to, on_delete, **options)

class Menu(models.Model):
    name = models.CharField(max_length = 50)

class Category(models.Model):
    name = models.CharField(max_length = 50)
    menu = models.ForeignKey('Menu', on_delete = models.SET_NULL, null = True)

on_delete

  • CASCADE
    참조하는 객체가 삭제되면 foreignkey를 포함한 객체를 삭제한다.
    ForeignKey('self', on_delete = models.CASCADE)

  • SET_NULL
    참조하는 객체가 삭제되면 foreignkey를 null로 세팅한다. null 값이 True 일 때 가능
    ForeignKey('self', on_delete = models.SET_NULL, null = True)

  • SET_DEFAULT
    참조하는 객체가 삭제되면 foreignkey를 default 값으로 세팅한다.
    default 값이 설정되어야 사용 가능하다.
    ForeignKey('self', on_delete = models.SET_DEFAULT, default = 0)

  • PROTECT
    참조하는 객체가 삭제될 때 삭제가 되지 않도록 ProtectedError를 발생시킨다. (삭제 방지)
    ForeignKey('self', on_delete = models.PROTECT)

> ManyToManyField

관계 설정 대상이 되는 모델을 필수로 설정해줘야 한다.

장고는 중간테이블을 자동으로 생성한다. 하지만 직접 중간테이블을 만들면 through 를 지정해야 한다.

class Drink(models.Model):
    name = models.CharField(max_length = 50)
    allergy = models.ManyToManyField('Allergy', through = 'AllergyDrink')
		
    class Meta:
        db_table = 'drinks'

class Allergy(models.Model):
    name = models.CharField(max_length = 50)
    
    class Meta:
        db_table = 'allergies'

class AllergyDrink(models.Model):
    allergy = models.ForeignKey('Allergy', on_delete = models.CASCADE)
    drink = models.ForeignKey('Drink', on_delete = models.CASCADE)
		
    class Meta:
        db_table = 'allergies_drinks'

> OneToOneField

관계 설정 대상이 되는 모델과 참조하는 객체가 삭제 시 처리 방식을 필수로 설정해줘야 한다.

class Drink(models.Model):
    name = models.CharField(max_length=50)
    nutrition = models.OneToOneField('Nutrition', on_delete=models.SET_NULL, null=True)

    class Meta:
        db_table = 'drinks'

class Nutrition(models.Model):
    one_serving_kcal = models.DecimalField(max_digits=10, decimal_places=2)
    sodium_mg = models.DecimalField(max_digits=10, decimal_places=2)
    saturated_fat_g = models.DecimalField(max_digits=10, decimal_places=2)
   
    class Meta:
        db_table = 'nutritions'



🧳 Field Types

BigIntegerField

BigIntergerField(**options)

BooleanField

BooleanField(**options)

True/False 필드다.
null 값 허용이 필요하다면, 이 필드 대신 NullBooleanField 를 사용해야 한다.

Field.default 가 정의되지 않았을 때 BooleanField의 기본값은 None 이다.

CharField

CharField(max_length = None, **options)

작은 문자열에서 큰 사이즈의 문자열을 위한 문자열 필드다.
많은 양의 텍스트일 경우 TextField 를 사용한다.

max_length 최대길이(문자 수) byte로 정의. (utf-8에서 한글은 3 byte)

DateField

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

auto_now_add 객체가 처음 생성될 때 자동으로 현재 시간이 설정된다.

auto_now 객체가 저장될 때마다(.save()) 자동으로 현재 시간이 설정된다.

DateTimeField

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

DecimalField

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

max_digits 숫자에 허용되는 최대 자릿수이다.

decimal_places 숫자와 함께 저장될 소수 자릿수이다.

EmailField

EmailField(max_length = 254, **options)

유효한 이메일 주소인지 체크하는 CharField다. 입력값을 검증하는데 EmailValidator를 사용한다.

FloatField

FloatField(**options)

FloatField는 내부적으로 python의 float 타입을 사용하지만, DecimalField는 python의 decimal 타입을 사용한다.

IntegerField

IntegerField(**options)

NullBooleanField

NullBooleanField(**options)

BooleanFielnull = True 대신에 사용한다.

PositiveIntegerField

PositiveIntegerField(**options)

IntegerField 와 비슷하지만 0 또는 양수이어야 한다.

PositiveSmallIntegerField

PositiveSmallIntegerField(**options)

SmallIntegerField

SmallIntegerField(**options)

TextField

TextField(**options)

TimeField

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

URLField

URLField(max_length = 200, **options)

URL을 위한 CharField다.

profile
꾸준히 나아가자!

0개의 댓글