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".
Если я проверяю экземпляр формы, все должно работать, но каким-то образом при рендеринге формы доллары не выбираются, тогда валюта евро выбирается по умолчанию.
Я делаю нечто подобное в режиме создания (я не передаю в экземпляре модели), и в этом случае это работает. Не знаю, что может вызвать это.