Предварительно заполните Django форму ChoiceField данными экземпляра - PullRequest
1 голос
/ 03 мая 2020

Требуется помощь по предварительному заполнению форм Django: у меня есть форма, которая обновляет модель UserProfile. Когда форма загружается, я хочу, чтобы она была предварительно заполнена существующими данными UserProfile. Достаточно просто, экземпляр можно передать в форму. Однако, похоже, что поля с вариантами выбора (которые появляются как select раскрывающиеся элементы в HTML) не заполняются предварительно данными экземпляра, а вместо этого по умолчанию используется значение '----------- ».

Я пытался вручную установить начальное значение для указанной формы c (например, страны), но оно не доходило до HTML.

    form = UserProfileForm(instance=user_profile)
    form.fields['country'].initial = 'GBR'

I ' Я уверен, что я мог бы создать сложную работу, чтобы выбрать текущую страну во внешнем интерфейсе, но такое ощущение, что это должно быть возможно в Django. Я не мог найти решения в других вопросах, поэтому был бы признателен за любую помощь в этом.

1 Ответ

0 голосов
/ 03 мая 2020

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

form = UserProfileForm(instance=user_profile, initial={'country': 'GBR'})

Если поле country должно быть заполнено данными user_profile, тогда вы можете определить форму следующим образом (при условии, что country - это поле в UserProfile классе)

class UserProfileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        if self.instance:
            self.initial['country'] = instance.country

Почему то, что вы делаете, не работает?

Вы используете:

form.fields['country'].initial = 'GBR'

Это не будет работать для ограниченной формы . form = UserProfileForm(instance=user_profile) вернет ограниченную форму.

From docs :

Аргумент initial позволяет указать начальное значение, которое будет использоваться при визуализации этого Field в unbound Form.

Чтобы указать исходные данные Dynami c, см. Параметр Form.initial.

...