You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:51:02