An easy to use money field for Django. Handles type conversions and arithmetic seamlessly.
Python 2.7 and 3.3+, Django 1.6+.
pip install django-easymoney
from django.db import models from easymoney import MoneyField class MyModel(models.Model): price = MoneyField(default=3.14) other_price = MoneyField(default=1) obj = MyModel() print obj.price # -> $3.14 # Money arithmetic obj.price + obj.other_price # $4.14 # Mix with ints and floats obj.price + 1 # $4.14 obj.price + 0.2 # $3.34 # No partial cents or crazy floats obj.price / 3 # $1.05
A primary use of easymoney is global currency defined in settings with global formatting and precision. Here is how you do that:
# These are default settings, code and locales refer to ones used in babel library CURRENCY_CODE = 'USD' CURRENCY_LOCALE = 'en_US' CURRENCY_DECIMAL_PLACES = 2 # This is optional, for cases when you want to use some fake currency CURRENCY_FORMAT = '# points'
One money field can't store different currencies, however, you can create different money classes and model fields for them:
from easymoney import Money, MoneyField class GameMoney(Money): # CODE = '...' # LOCALE = '...' DECIMAL_PLACES = 0 FORMAT = '# points' class GameMoneyField(MoneyField): MONEY_CLASS = GameMoney