TIL - 04/11 - Django Fields & Decimal Fields

Sung Jun Jin·2020년 4월 11일
5

TIL

목록 보기
13/25
post-custom-banner

Django Field Type

  • CharField : 길이가 제한된 문자열 필드 타입. 최대 길이를 max_length 옵션에 지정해야 한다.
name = models.CharField(max_length = 40)
  • TextField: 대용량 문자열 필드. html의 textarea 태그와 유사하며 문자열의 제한이 없다.
review = models.TextField()
  • IntegerField : 32비트 정수형 필드. 정수 사이즈에 따라 BigIntegerField, SmallIntegerField를 사용할 수 있다.
integer = models.IntegerField()
  • BooleanField : Boolean형의 데이터를 담는 필드, null값을 허용하기 위해서는 NullBooleanField를 사용한다. 또한 default값을 옵션으로 지정해줄수 있다.
is_my_drink = models.BooleanField(default = False)
  • BinaryField : raw binary 데이터를 표현하기 위한 필드. bytes, bytearray memoryview를 할당할 수 있다. max_length를 옵션으로 지정할수 있다.
my_binary = models.BinaryField()
  • FileField : 파일 저장을 지원하는 모델 필드. upload_to 옵션을 사용해 파일 이름과 저장될 경로를 지정해줄 수 있다.
my_file = models.FileField(upload_to = 'uploads/')
  • URLField : CharField의 파생 클래스로써 URL을 표현하는 필드이다.
image = models.URLField()
  • DateTimeField : 날짜와 시간을 가지는 필드. created_at, updated_at 필드에 사용된다. 날짜만 가질 경우는 DateField, 시간만 가질 경우는 TimeField를 사용한다.
created_at = models.DateTimeField(auto_now_add=True)

DateTimeField Options
auto_now_add : model이 최초로 저장(insert)될시에 현재 날짜를 저장한다
auto_now : model이 수정(save)될 때마다 현재날짜로 갱신된다

Django Field Options

  • null : null=True이면 DB에 Null값이 허용된며 빈(Empty) 값을 DB에 Null에 저장한다.
image = models.URLField(null = True)
  • blank : blank = False이면 필드가 반드시 입력해야하는 필드(required), blank = True이면 optional 필드이다.
my_date = models.DateTimeField(blank = True)

blank와 null의 차이점
null : DB와 관련되어 있다. database column이 null 값을 허용하느냐 아니냐를 결정해준다.
blank : Form에 대한 유효성과 관련되어 있다. 즉, 반드시 입력해야하는지 아닌지를 결정해준다.

  • default : 필드의 default값을 지정한다
is_my_drink = models.BooleanField(default = False)
  • unique : 해당 컬럼이 테이블에서 Unique(유일)함을 표시한다. 컬럼에 대한 Unique Index를 생성한다.
student_id = models.IntegerField(unique = True)

이 밖의 다른 Field Option들이 있지만 사용해보는대로 차근차근 정리할 예정이다.

Decimal Field

스타벅스 DB Schema 모델링 과제에서 영양성분표에 소숫점이 있어 Float형을 사용했는데 나중에 알고보니 Float형은 정확한 수치를 저장하는것이 아닌 근사 데이터 형식을 저장한다는 사실을 알게되었다. Float Field를 사용하는 대신 Decimal Field를 사용하라는 피드백을 받았다.

SQL의 Decimal Field

DECIMAL(5,2) : 전체 5자리중에서 소숫점 2자리까지 확보되었다 라는 의미이다.
ex) 스타벅스 콜드 브루 몰트 나트륨(mg) 함량 표현하기

정확하게 표현해보자면 전체 4자리중 소숫점 1자리를 확보해야 한다.
DECIMAL(4,1)

하지만 유연한 소숫점 표현을 위해 나트륨 필드를 DECIMAL(10,2)정도로 할당해주는게 좋다.

Django의 Decimal Field

Decimal field는 고정 소숫점을 가지는 decimal 필드이다. 정확한 숫자를 저장한다. 2개의 필수 option이 있다

  • max_digits : 숫자에 허용되는 최대 자릿수이다.
  • decimal_places : 숫자와 함께 저장하는 소수 자릿수의 개수이다.

ex) 소숫점 이하 3자리수의 숫자를 99개 까지 저장하기
나트륨 함량 : 20.142mg 표현하기

sodium_mg = models.DecimalField(max_digits = 5, decimal_places = 3)
profile
주니어 개발쟈🤦‍♂️
post-custom-banner

0개의 댓글