장고 ORM. 장고 모델에서 금액 관련 필드 (feat. DeximalField )

“장고 모델에서 금액”을 처리하는 법에 대해 알게 된 “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/

Leave a Comment

목차