#django #model #settings #currency #money-format
Вопрос:
Я хочу сохранить данные о денежном поле в setting.py файл, чтобы я мог использовать его везде, где я использую денежное поле, я хочу сохранить это..
MoneyField(max_digits=10, decimal_places=2, default_currency='INR', null=False, default=0.0)
Как можно сохранить его в settings.py
Ответ №1:
В 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.
Ответ №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
, просто установите 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')