如何在settings.py中配置MoneyField默认参数(默认货币为INR)
MoneyField参数全局配置方案
步骤1:在settings.py中添加全局配置
在项目的settings.py文件末尾添加如下字典配置,存储通用的MoneyField参数:
# settings.py 新增内容 MONEY_FIELD_DEFAULTS = { "max_digits": 10, "decimal_places": 2, "default_currency": "INR", "null": False, "default": 0.0 }
步骤2:选择任意一种方式复用配置
- 方式1:直接解包配置使用
在需要用到MoneyField的模型文件中导入settings,使用时直接解包配置字典即可,也可单独覆盖个别参数:
from django.db import models from django.conf import settings from djmoney.models.fields import MoneyField class Goods(models.Model): # 完全使用全局配置 price = MoneyField(**settings.MONEY_FIELD_DEFAULTS) # 单独覆盖参数,不会影响全局默认配置 activity_price = MoneyField(**settings.MONEY_FIELD_DEFAULTS, null=True, default=None)
- 方式2:封装自定义字段(更推荐,代码更简洁)
先新建字段封装文件,比如core/fields.py,自定义继承自MoneyField的全局字段类:
# core/fields.py from djmoney.models.fields import MoneyField from django.conf import settings class DefaultMoneyField(MoneyField): def __init__(self, *args, **kwargs): default_params = settings.MONEY_FIELD_DEFAULTS.copy() # 传入的自定义参数会覆盖全局默认值 default_params.update(kwargs) super().__init__(*args, **default_params)
后续使用时直接导入自定义字段即可:
from django.db import models from core.fields import DefaultMoneyField class Order(models.Model): # 直接使用全局配置 total_amount = DefaultMoneyField() # 支持自定义覆盖参数 pay_amount = DefaultMoneyField(default=0.01)
内容的提问来源于stack exchange,提问作者Shweta Shinde
相关产品推荐
相关产品推荐

