Как я могу установить default_currency="INR" в файле settings.py, потому что он используется много раз в проекте?
Я хочу сохранить детали MoneyField в файле setting.py, чтобы я мог использовать его в каждом месте, где я использую MoneyField Я хочу сохранить это...
MoneyField(max_digits=10, decimal_places=2, default_currency='INR', null=False, default=0.0)
Как сохранить его в settings.py
Django использует параметр DEFAULT_CURRENCY
для установки валюты, по умолчанию 'XYZ'
. Действительно, если мы посмотрим на исходный код [GitHub], мы увидим:
from ..settings import CURRENCY_CHOICES, DECIMAL_PLACES, DEFAULT_CURRENCY
# …
class MoneyField(models.DecimalField):
# …
def __init__(
self,
# ...,
default_currency=DEFAULT_CURRENCY,
# …
):
# …
# …
Таким образом, вы можете установить DEFAULT_CURRENCY
в settings.py
на:
# settings.py
# …
DEFAULT_CURRENCY = 'INR'
# …
и опускать параметры default_currency='INR'
при создании MoneyField
s.
Вы, вероятно, можете использовать functools.partial
для этого.
from functools import partial
from django.db import models
MyMoneyField = partial(
models.DecimalField,
default='INR',
...
)
Теперь вы можете использовать это в форме:
class MyModel(models.Model):
amount = MyMoneyField()
В случае, если вы хотите, чтобы это можно было настроить через ваш settings
, просто установите DEFAULT_CURRENCY
в INR
в вашем settings.py
, а затем используйте это в форме:
from django.conf import settings
MyMoneyField = partial(
models.DecimalField,
default=settings.DEFAULT_CURRENCY,
...
)
partial
также позволяет использовать для замены ранее заполненного аргумента. Например:
class AnotherModel(models.Model):
new_amount = MyMoneyField(current='USD')