Вот объявление поля в форме:
max_number = forms.ChoiceField(widget = forms.Select(),
choices = ([('1','1'), ('2','2'),('3','3'), ]), initial='3', required = True,)
Я хотел бы установить начальное значение, но 3
это не работает. Я поигрался с параметрами, кавычками / без кавычек и т.д., но без изменений.
Может ли кто-нибудь дать мне окончательный ответ, если это возможно? И / или необходимую настройку в моем фрагменте кода?
Я использую Django 1.0
django
django-models
django-forms
большая жизнь
источник
источник
Ответы:
Попробуйте установить начальное значение при создании формы:
источник
'3'
соответствующий первому значению кортежа или второй?Это не касается непосредственного вопроса, но этот вопрос / ответ подходит для поисков, связанных с попыткой присвоить выбранное значение параметру
ChoiceField
.Если вы уже вызывали
super().__init__
свой класс Form, вам следует обновитьform.initial
словарь, а неfield.initial
свойство. Если вы изучаетеform.initial
(например,print self.initial
после вызоваsuper().__init__
), он будет содержать значения для всех полей. Наличие значенияNone
в этом dict переопределитfield.initial
значение.например
источник
Вы также можете сделать следующее. в вашем классе формы def:
затем при вызове формы в вашем представлении вы можете динамически устанавливать как начальный выбор, так и список выбора.
Примечание: начальные значения должны быть списком, а варианты выбора должны состоять из двух кортежей, в моем примере выше у меня есть список из двух кортежей. Надеюсь это поможет.
источник
initial
относится к ключу выбираемого элемента, а не к его индексу. Мне потребовалось несколько попыток, чтобы решить эту проблему!Я тоже столкнулся с этой проблемой и понял, что проблема в браузере. Когда вы обновляете, браузер повторно заполняет форму теми же значениями, что и раньше, игнорируя отмеченное поле. Если вы посмотрите исходный код, вы увидите, что отмеченное значение верное. Или поместите курсор в поле URL-адреса вашего браузера и нажмите Enter. Это перезагрузит форму с нуля.
источник
И Том, и ответы Бертона в конечном итоге работают для меня, но мне было немного сложно понять, как применить их к файлу
ModelChoiceField
.Единственная уловка заключается в том, что варианты хранятся в виде кортежей
(<model's ID>, <model's unicode repr>)
, поэтому, если вы хотите установить исходный выбор модели, вы передаете идентификатор модели в качестве начального значения, а не сам объект, его имя или что-то еще. Тогда это очень просто:В качестве альтернативы
initial
аргумент можно игнорировать вместо дополнительной строки с помощью:источник
GET
запроса и установить его из представления.Дэйв - не удалось ли найти решение проблемы с браузером? Есть ли способ принудительно обновить?
Что касается исходной проблемы, попробуйте выполнить следующее при инициализации формы:
источник
Instances should always modify self.fields; they should not modify self.base_fields.
Чтобы убедиться, мне нужно увидеть, как вы отрисовываете форму. Начальное значение используется только в несвязанной форме, если оно связано и значение для этого поля не включено, ничего не будет выбрано.
источник
Попробуйте, у меня это работает, я добавил это в models.py
источник
TypeError at /my/url/ __init__() got an unexpected keyword argument 'default' Request Method: GET Request URL: http://localhost:8000/my/url/ Django Version: 1.8.1 Exception Type: TypeError Exception Value: __init__() got an unexpected keyword argument 'default'