Как я могу установить 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' при создании MoneyFields.

Вы, вероятно, можете использовать 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')
Вернуться на верх