Как я могу установить default_currency= «INR» в settings.py файл, потому что его много раз использовали в проекте?

#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')