Django не может манипулировать начальным значением редактирования формы

В проекте Django я использую пакет django-money.

Когда форма находится в режиме редактирования, мне нужно на лету изменить ее начальные значения в полях Money, если они пусты:

from djmoney.models.fields import MoneyField

DEFAULT_CURRENCY = 'EUR'
CURRENCIES_CHOICES = [
    ('EUR', 'Euro (EUR)'), 
    ('USD', 'US Dollar (USD)'), 
    ('GBP', 'Pound Sterling (GBP)')]


class ExampleModel(models.Model):
    description = models.TextField(blank=True)

    total_charged = MoneyField(max_digits=22,
                               decimal_places=7,
                               default_currency=DEFAULT_CURRENCY,
                               currency_choices=CURRENCIES_CHOICES,
                               null=True, blank=True)



class FormExampleEdit(forms.ModelForm):
    class Meta:
        model = ExampleModel
        fields = ['description', 'total_charged']


    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if self.initial.get(total_charged, None) is None:
            self.fields['total_charged'].initial = [None, 'USD']

MoneyField состоит из двух полей (сумма и валюта).

Когда создается экземпляр FormExampleEdit с ExampleModel экземпляр (режим редактирования), если total_charged поле равно None, тогда его начальное значение валюты будет установлено в "EUR", то есть default_currency выбрано в модельном поле.

В некоторых случаях эта валюта может зависеть от других факторов, поэтому, когда я создаю экземпляр формы с экземпляром ExampleModel, я проверяю, есть ли у экземпляра total_charged установлен в NoneВ этом случае я манипулирую начальным значением поля формы, чтобы установить для его валюты что-то другое, например, "USD".

Если я проверяю экземпляр формы, все должно работать, но каким-то образом при рендеринге формы доллары не выбираются, тогда валюта евро выбирается по умолчанию.

Я делаю нечто подобное в режиме создания (я не передаю в экземпляре модели), и в этом случае это работает. Не знаю, что может вызвать это.

0 ответов

Другие вопросы по тегам