“장고 모델에서 금액”을 처리하는 법에 대해 알게 된 “DeximalField”에 대해 정리해보았습니다.
요금을 처리하기 위해서 모델에 PositiveIntegerField를 사용했었는데요.
생각해보니 달러는 소숫점 단위로 쓰이기도 하다보니 PositiveIntegerField 보다 더 좋은 field type이 있을까? 해서 검색하게 되었습니다.
Django에는 요금을 직접 처리하기 위한 내장 필드가 없지만“ DeximalField”와 “FloatField”를 사용하여 요구 사항에 따라 요금을 관리할 수 있습니다.
DeximalField
일반적으로 비율은 숫자 값을 정확하게 저장하기 위해 ‘DecimalField’ 가 사용됩니다.
from django.db import models
def get_currencies():
return {i: i for i in settings.CURRENCIES}
class Expense(models.Model):
amount = models.DecimalField(max_digits=10, decimal_places=2)
currency = models.CharField(max_length=3, choices=get_currencies)
- max_digits=10은 숫자에 허용되는 최대 자릿수를 지정합니다.
- decimal_places=2는 소수점 이하 자릿수를 지정합니다.
FloatField
높은 정밀도가 그다지 중요하지 않고 성능이 더 중요한 경우 FloatField를 사용할 수 있습니다.
from django.db import models
class Service(models.Model):
name = models.CharField(max_length=100)
rate = models.FloatField()
FloatField는 부동 소수점 연산이 더 간단하고 잠재적으로 더 빠릅니다.
대신에 재무 계산에 반올림 오류가 발생할 수 있습니다.
Summary
필드 유형 | 사용 사례 | 장점 | 단점 |
---|---|---|---|
DecimalField | 재무 계산, 높은 정밀도 필요 | 높은 정밀도, 정확한 값 | 약간 더 복잡한 처리 |
FloatField | 일반 수치, 성능에 중요 | 더 간단하고 잠재적으로 더 빠름 | 반올림 오류 가능성 |
참고하면 좋은 글
https://docs.djangoproject.com/en/5.0/ref/models/fields/
장고 시작하기 8 : 장고 Model 생성하기
“장고 Model”은 데이터베이스 테이블을 나타내는 Python 클래스입니다. 데이터베이스에 저장된 데이터의 구조와 동작을 정의할 수 있는거죠. 장고 Model의 장점은 데이터베이스에 구애 받지 않는다는 점 입니다.