Skip to Content

Currency Models

The Currency Tool provides two Django models for storing exchange rates and currency metadata.

Model Overview

CurrencyRate Model

Stores exchange rates between currency pairs.

Fields

FieldTypeDescription
base_currencyCharFieldBase currency code (e.g., “IDR”)
quote_currencyCharFieldQuote currency code (e.g., “USD”)
rateDecimalFieldExchange rate (1 base = X quote)
providerCharFieldRate provider source
is_staleBooleanFieldManually marked as needing refresh
created_atDateTimeFieldRecord creation time
updated_atDateTimeFieldLast update time

Class Methods

from django_cfg.apps.tools.currency.models import CurrencyRate # Get rate for currency pair rate = CurrencyRate.get_rate("IDR", "USD") if rate: print(f"1 IDR = {rate.rate} USD") print(f"Updated: {rate.updated_at}") print(f"Expired: {rate.is_expired}") # Get rate value directly rate_value = CurrencyRate.get_rate_value("IDR", "USD") # Returns Decimal or None # Set/update rate CurrencyRate.set_rate( base="IDR", quote="USD", rate=Decimal("0.0000625"), provider="hybrid" ) # Mark rates as stale CurrencyRate.mark_stale(base="IDR") # All IDR rates CurrencyRate.mark_stale(quote="USD") # All rates to USD CurrencyRate.mark_stale() # All rates

Properties

rate = CurrencyRate.get_rate("IDR", "USD") # Check if rate is expired (older than update_interval) rate.is_expired # True/False # Get rate age in seconds rate.age_seconds # 3600.5

Querying Rates

from django_cfg.apps.tools.currency.models import CurrencyRate # All rates all_rates = CurrencyRate.objects.all() # Rates to USD usd_rates = CurrencyRate.objects.filter(quote_currency="USD") # Stale rates stale = CurrencyRate.objects.filter(is_stale=True) # Recent rates (last hour) from django.utils import timezone from datetime import timedelta recent = CurrencyRate.objects.filter( updated_at__gte=timezone.now() - timedelta(hours=1) )

Currency Model

Stores metadata about supported currencies.

Fields

FieldTypeDescription
codeCharFieldCurrency code (e.g., “USD”, “BTC”)
nameCharFieldFull currency name
symbolCharFieldCurrency symbol (e.g., ”$”, ”€“)
currency_typeCharField”fiat” or “crypto”
decimalsSmallIntegerFieldDecimal places for display
is_activeBooleanFieldAvailable for conversion
created_atDateTimeFieldRecord creation time
updated_atDateTimeFieldLast update time

Querying Currencies

from django_cfg.apps.tools.currency.models import Currency # All active currencies active = Currency.objects.filter(is_active=True) # Fiat currencies only fiat = Currency.objects.filter(currency_type="fiat", is_active=True) # Crypto currencies only crypto = Currency.objects.filter(currency_type="crypto", is_active=True) # Get specific currency usd = Currency.objects.get(code="USD") print(usd.display_name) # "USD ($ US Dollar)"

Validation Services

from django_cfg.apps.tools.currency.services import ( get_currency_codes, is_valid_currency, clear_currency_cache, CURRENCY_CODES, # Static fallback set FIAT_CODES, # Static fiat set CRYPTO_CODES, # Static crypto set ) # Get valid codes from DB (cached) codes = get_currency_codes() # {'USD', 'EUR', 'IDR', ...} # Validate a currency code if is_valid_currency("USD"): print("Valid!") # Clear cache after adding new currencies clear_currency_cache()

Converter Service

High-level conversion API:

from django_cfg.apps.tools.currency.services import get_converter converter = get_converter() # Convert amount result = converter.convert(100, "EUR", "USD") print(result.result) # 108.50 print(result.rate.rate) # 1.085 print(result.rate.source) # "hybrid" # Get rate only rate = converter.get_rate("IDR", "USD") print(rate.rate) # 0.0000625 print(rate.source) # "hybrid" print(rate.timestamp) # datetime # Force refresh rate rate = converter.refresh_rate("IDR", "USD")

Rate Update Services

from django_cfg.apps.tools.currency.services import ( update_rates, update_rates_if_needed, sync_currencies, sync_all, ) # Force update all rates update_rates(target_currency="USD") # Update only if stale update_rates_if_needed() # Sync currency list to DB sync_currencies() # Sync both currencies and rates sync_all()

Supported Currencies

Fiat (50+)

RegionCurrencies
MajorUSD, EUR, GBP, JPY, CNY, CHF
AsianKRW, INR, THB, VND, IDR, SGD, HKD, TWD, MYR, PHP
EuropeanRUB, UAH, PLN, CZK, TRY, SEK, NOK, DKK, HUF, RON
AmericasCAD, AUD, NZD, BRL, MXN, ARS, CLP, COP, PEN
Middle EastAED, SAR, ILS, QAR, KWD, BHD, OMR
AfricaZAR, EGP, NGN, KES, MAD

Crypto (18)

BTC, ETH, USDT, USDC, BNB, SOL, XRP, ADA, DOGE, LTC, DOT, MATIC, AVAX, LINK, UNI, ATOM, XLM, TRX

Admin Interface

Both models are registered in Django Admin:

  • CurrencyRate Admin: View/edit rates, bulk refresh, filter by currency
  • Currency Admin: Manage currency metadata, activate/deactivate
/admin/cfg_currency/currencyrate/ /admin/cfg_currency/currency/

See Also

Last updated on