为什么我的Django视图中django-money汇率转换结果异常?
问题根因与解决方案
1. 核心错误:使用固定历史汇率接口
你当前配置的FIXER_URL和OPEN_EXCHANGE_RATES_URL都硬编码了2013、2017年的历史汇率端点,获取到的是多年前的陈旧汇率数据,和当前实际汇率偏差极大,这是转换结果错误的核心原因。
2. 修复步骤
步骤1:修改汇率接口配置为最新汇率端点
将settings.py里的两个接口地址替换为实时接口(去掉历史日期路径即可),修改示例:OPEN_EXCHANGE_RATES_URL = 'https://openexchangerates.org/api/latest.json?symbols=EUR,NOK,SEK,CZK,USD,GBP,CAD,CHF,DKK,KZT,BGN,PLN,HUF,RUB,RON,UAH,TRY,ZAR' FIXER_URL = 'http://data.fixer.io/api/latest?symbols=EUR,NOK,GBP,SEK,CZK,USD,CAD,CHF,DKK,KZT,BGN,PLN,HUF,RUB,RON,UAH,TRY,ZAR'步骤2:更新本地缓存的汇率数据
django-money会默认缓存已获取的汇率,修改配置后执行命令刷新本地存储的汇率值:python manage.py update_rates步骤3:可选精度优化
你当前模型里credit_limit用的是FloatField,浮点类型容易出现精度丢失,建议改成MoneyField和对应币种直接绑定,避免后续转换时的额外精度误差。步骤4:验证转换结果
可以直接在Django shell中测试转换逻辑是否符合预期:from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money # 测试TRY转USD print(convert_money(Money(1000000, 'TRY'), 'USD')) # 测试EUR转USD print(convert_money(Money(10000, 'EUR'), 'USD'))
内容的提问来源于stack exchange,提问作者stephone
相关产品推荐
相关产品推荐

