Django Money

django-money предоставляет поля для работы с денежными суммами и валютами в Django.

Установка

1# Установка пакета
2pip install django-money
1# Или через Poetry
2poetry add django-money

Настройка

1# settings.py
2INSTALLED_APPS = [
3    'djmoney',
4]

Использование в моделях

1from djmoney.models.fields import MoneyField
2
3class Product(models.Model):
4    name = models.CharField(max_length=100)
5    price = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')
6
7    def __str__(self):
8        return f"{self.name}: {self.price}"

Работа с данными

 1from moneyed import Money
 2
 3# Создание объекта
 4product = Product.objects.create(
 5    name="Laptop",
 6    price=Money(1000, 'USD')
 7)
 8
 9# Операции с валютами
10product.price.amount  # 1000
11product.price.currency  # 'USD'
12
13# Фильтрация
14expensive = Product.objects.filter(price__gt=Money(500, 'USD'))
15
16# Арифметические операции
17new_price = product.price * 1.1  # +10%
18discount = product.price * 0.8   # -20%

Настройка валют

1# settings.py
2CURRENCIES = ('USD', 'EUR', 'RUB')
3
4# Множественные валюты
5class MultiCurrencyProduct(models.Model):
6    name = models.CharField(max_length=100)
7    price_usd = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')
8    price_eur = MoneyField(max_digits=14, decimal_places=2, default_currency='EUR')

FAQ

Q: Как конвертировать валюты?
A: Используй сторонние сервисы или django-money с exchange rates.

Q: Можно ли использовать разные валюты?
A: Да, создай несколько полей для разных валют.