Django не может манипулировать начальным значением редактирования формы - PullRequest
0 голосов
/ 02 октября 2018

В проекте 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']

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

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

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

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

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

...