На всю жизнь я не могу понять, как предварительно заполнить BooleanField с помощью WTForms. У меня есть поле под названием «активное». По умолчанию он не проверяется и не требуется. Итак, я настроил это как ...
class QuestionForm(Form):
question = TextField('Question', [validators.Required()])
slug = TextField('Slug', [validators.Required()])
active = BooleanField('Active')
Затем у меня есть СТРАНИЦА РЕДАКТИРОВАНИЯ, где я показываю форму для «вопроса», который хочу отредактировать.
{{ form.question.label }}
{{ form.question(value=q.question) }}
{{ form.active(value=q.active) }} Show this question?
Если «active» имеет значение True, я бы хотел, чтобы у BooleanField (флажок) был атрибут «checked». А если False, то не делать этого. Но я даже не могу понять, как сделать так, чтобы флажок имел отмеченное состояние при рендеринге формы, не говоря уже об условной части.
Единственный способ, которым я смог проверить это, - это добавить default = True при определении формы. Но это не то, что мне нужно.
Я пробовал использовать 'default', 'initial', 'value', 'selected' при рендеринге формы безуспешно. И я искал документы и Google. Думаю, что-то упускаю! :)
ОБНОВИТЬ
Вот как выглядит мой взгляд. Может в этом проблема?
@mod.route('/q/<slug>/edit', methods = ['GET', 'POST'])
def edit(slug):
form = QuestionForm(request.form, csrf_enabled=False)
q = Question.query(Question.slug==slug).get()
if request.method=='POST':
if form.validate_on_submit():
q.question = form.data.get('question')
q.slug = form.data.get('slug')
q.active = form.data.get('active')
q.put()
return redirect('/questions')
return render_template('questions/edit.html', form=form, q=q)