Установка выбранного значения на формах Django.ChoiceField
вот объявление поля в форме:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Я хотел бы установить начальное значение равным 3, и это, похоже, не работает. Я играл с param, quotes / no quotes и т. д... но никаких изменений.
несколько результатов, которые я нашел через Google, предполагают, что можно установить начальное значение, но мне никогда не удавалось заставить его работать! Кстати, я нахожусь на django 1.0.
может кто-нибудь дать мне окончательный ответ, если это возможно? И-или необходимая настройка в моем фрагменте кода?
большое спасибо.
8 ответов:
попробуйте установить начальное значение при создании экземпляра формы:
form = MyForm(initial={'max_number': '3'})
это не касается непосредственного вопроса, но этот Q / A подходит для поиска, связанного с попыткой присвоить выбранное значение a
ChoiceField.если вы уже назвали
super().__init__в вашем классе формы, вы должны обновитьform.initialсловарь, а неfield.initialсобственность. Если вы учитесьform.initial(например,print self.initialпосле вызоваsuper().__init__), он будет содержать значения все поля. Имея значениеNoneв этом дикт переопределитfield.initialзначение.например
class MyForm(forms.Form): def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) # assign a (computed, I assume) default value to the choice field self.initial['choices_field_name'] = 'default value' # you should NOT do this: self.fields['choices_field_name'].initial = 'default value'
вы также можете сделать следующее. в вашей форме класс def:
max_number = forms.ChoiceField(widget = forms.Select(), choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)затем при вызове формы в вашем представлении вы можете динамически устанавливать как начальные варианты, так и список вариантов.
yourFormInstance = YourFormClass() yourFormInstance.fields['max_number'].choices = [(1,1),(2,2),(3,3)] yourFormInstance.fields['max_number'].initial = [1]Примечание: начальные значения должны быть списком и выбор должен быть 2-кортежей, в моем примере выше у меня есть список 2-кортежей. Надеюсь, это поможет.
Я столкнулся с этой проблемой, и выяснил, что проблема в браузере. При обновлении браузер повторно заполняет форму теми же значениями, что и раньше, игнорируя отмеченное поле. Если вы просмотрите Источник, вы увидите, что проверенное значение правильно. Или поместите курсор в поле URL вашего браузера и нажмите enter. Это позволит повторно загрузить форму с нуля.
ответы Тома и Бертона в конечном итоге работают для меня, но у меня были небольшие проблемы с тем, как применить их к
ModelChoiceField.единственный трюк в том, что выбор хранится в виде кортежей
(<model's ID>, <model's unicode repr>), Так что если вы хотите установить начальный выбор модели, вы передаете модель ID как начальное значение, а не сам объект или его имя или что-нибудь еще. Тогда это так же просто, как:form = EmployeeForm(initial={'manager': manager_employee_id})или
initialаргумент может быть проигнорирован вместо дополнительной строки с:form.fields['manager'].initial = manager_employee_id
Дэйв-есть успехи в поиске решения проблемы браузера? Есть ли способ принудительно обновить?
что касается исходной проблемы, попробуйте выполнить следующие действия при инициализации формы:
def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.base_fields['MyChoiceField'].initial = initial_value
чтобы убедиться, что мне нужно посмотреть, как вы рендеринга формы. Начальное значение используется только в несвязанной форме, если оно связано и значение для этого поля не включено, ничего не будет выбрано.
попробуйте это работает для меня, я добавил Это в models.py
options = ( ('1','1'), ('2','2'), ('3','3') ) max_number = forms.ChoiceField(max_length = 2, choices = options, default ='3')
Comments