【问题标题】:How can I set default_currency= "INR" in settings.py file because its use many times in project?我如何在 settings.py 文件中设置 default_currency= "INR" 因为它在项目中多次使用?
【发布时间】:2021-10-20 09:21:19
【问题描述】:
我想将 MoneyField 详细信息保存在 setting.py 文件中,这样我就可以在每个使用 MoneyField 的地方使用它我想保存它..
MoneyField(max_digits=10, decimal_places=2, default_currency='INR', null=False, default=0.0)
如何保存在settings.py中
【问题讨论】:
标签:
django
model
settings
currency
money-format
【解决方案1】:
Django 使用名为DEFAULT_CURRENCY 的设置来设置货币,默认为'XYZ'。事实上,如果我们查看source code [GitHub],我们会看到:
from ..settings import CURRENCY_CHOICES, DECIMAL_PLACES, DEFAULT_CURRENCY
# …
class MoneyField(models.DecimalField):
# …
def __init__(
self,
# ...,
default_currency=DEFAULT_CURRENCY,
# …
):
# …
# …
因此,您可以将settings.py 中的DEFAULT_CURRENCY 设置为:
# settings.py
# …
DEFAULT_CURRENCY = 'INR'
# …
并且在创建MoneyFields 时省略default_currency='INR' 参数。
【解决方案2】:
您可能可以使用functools.partial 来执行此操作。
from functools import partial
from django.db import models
MyMoneyField = partial(
models.DecimalField,
default='INR',
...
)
现在您可以在表单中使用它:
class MyModel(models.Model):
amount = MyMoneyField()
如果您希望通过您的settings 进行配置,只需在您的settings.py 中将DEFAULT_CURRENCY 设置为INR,然后以下列形式使用它:
from django.conf import settings
MyMoneyField = partial(
models.DecimalField,
default=settings.DEFAULT_CURRENCY,
...
)
partial 还允许使用替换之前填充的参数。例如:
class AnotherModel(models.Model):
new_amount = MyMoneyField(current='USD')