Значения WTForms RadioField по умолчанию

Я создаю html-форму с wtforms следующим образом:

<div class="control-group">
    {% for subfield in form.time_offset %}
    <label class="radio">
        {{ subfield }}
        {{ subfield.label }}
    </label>
    {% endfor %}
</div>

Мой класс формы выглядит так:

class SN4639(Form):
    time_offset = RadioField(u'Label', choices=[
        ('2', u'Check when Daylight saving has begun, UTC+02:00'),
        ('1', u'Check when Daylight saving has stopped, UTC+01:00')],
        default=2, validators=[Required()])

Когда я теперь открываю форму редактирования, я получаю через SQL значение 1 или 2 - как я могу установить указанную радиокнопку?


person Kilrathy    schedule 22.05.2013    source источник
comment
Если вы хотите установить значения по умолчанию в формах, по каким причинам вы хотите сделать это в html? Вы хотите два значения по умолчанию?   -  person Denis    schedule 22.05.2013
comment
В форме создания я установил значения по умолчанию, как видите, в классе. Но сейчас я создаю форму редактирования и там она должна быть предварительно выбрана. например мужчина/женщина, и когда я получил значение «m» из базы данных, должен быть выбран мужчина... Как я могу это сделать?   -  person Kilrathy    schedule 23.05.2013
comment
по умолчанию=yourObjectFromDB.sex ????   -  person Denis    schedule 23.05.2013
comment
Привет, извините, может быть, я новый или сброс... и не понимаю. Вы устанавливаете это в классе или в шаблоне? Тем не менее, похоже, я продолжу попытки в эти выходные.   -  person Kilrathy    schedule 24.05.2013
comment
lel, я понимаю, что вы установили класс, как обычно, но прикрепите _ в конце, потому что класс - это зарезервированное слово. Таким образом, вы можете установить класс в шаблонах, подобных этому class_=someclass   -  person Denis    schedule 27.05.2013


Ответы (4)


default=2 должен иметь тип string, а не int:

class SN4639(Form):
    time_offset = RadioField(u'Label', choices=[
        ('2', u'Check when Daylight saving has begun, UTC+02:00'),
        ('1', u'Check when Daylight saving has stopped, UTC+01:00')],
        default='2', validators=[Required()])
person sparker    schedule 07.12.2014

Если я правильно понимаю ваш вопрос, вы хотите, чтобы форма отображалась с предварительно выбранным выбором (вместо того, чтобы возвращать выбор по умолчанию, если в форму не отправлено значение)...

Что вы можете сделать, так это построить форму, установив предварительно выбранное значение:

myform = SN4639(time_offset='2')

А затем передайте myform вашему шаблону для рендеринга.

person Brandon W. King    schedule 30.06.2013

Мой друг,

Вам нужно заполнить поле .data данными, которые есть в базе данных после создания формы. См. этот пример:

my_instance = SN4639()
my_db_id = get_id_on_my_db()  # fill the variable with the database id

my_instance.time_offset.data = my_db_id  # here's the cat jump

Теперь, когда вы используете my_instance.time_offset() в своем HTML, будет выбрано правильное радио

ВАЖНОЕ ПРИМЕЧАНИЕ:

Если ваш идентификатор является целым числом, вы должны добавить параметр coerce=int в RadioField. См. этот пример:

time_offset = RadioField(u'Label', choices=[
    (2, u'Check when Daylight saving has begun, UTC+02:00'),
    (1, u'Check when Daylight saving has stopped, UTC+01:00')],
    coerce=int,
    default=2, validators=[Required()])
person Thales Ferraz    schedule 20.04.2021

Form.__init__ принимает аргумент ключевого слова obj=, который будет заполнять форму из данного объекта, если не предоставлены данные формы или другие значения по умолчанию. Передайте результат из базы данных, и он должен работать.

person davidism    schedule 30.06.2013