将变量传递到 WTForms class
Passing a variable into a WTForms class
我对 Python 和 Flask 相对缺乏经验,并且一直在尝试将变量传递给 WTForms class。
这是我拥有的:
views.py
@app.route('/teacher/tasks/new')
@login_required
def new_hw_task():
classes = Class.query.filter_by(userid=current_user.userid).all()
form = NewTaskForm(classes = classes)
return render_template('/teacher/new_hw_task.html', form=form)
forms.py
class NewTaskForm(FlaskForm):
classes = SelectMultipleField('Select classes to assign this homework to', choices = [("1", "Class 1"), ("2","Class 2")])
new_hw_task.html
<div class="form-group">
{{ form.classes.label }}
{{ form.classes(class_="form-control selectpicker", placeholder=form.classes.description, title="Select at least one class to assign", show_tick=true)}}
</div>
我想要 classes
变量(在 models.py 中定义的 Class
class 的实例 - 是的,是的,我知道在 forms.py 中访问一个名为 'Class') 的 class 是多么草率,这样我就可以用 [=] 中的选项替换 SelectMultipleField
中的选项14=]。但是,我找不到通过它的方法(你可以看到我已经尝试将 classes=classes
放入 NewTaskForm 之后的括号中)。
实际上,我的首选方法是从 forms.py[ 中简单地访问 current_user
(由 flask_login 设置的基于会话的对象) =41=],但我似乎也无法做到这一点,即使我在文件顶部导入 current_user。
请问有谁能给我解释一下哪里错了吗?
SelectField
的 WTForms 文档解释了如何将变量从视图传递到表单中。就像将选项列表分配给 form.field.choices
一样简单。反过来,您从字段构造函数中删除 choices=
关键字参数。
根据您的情况进行调整,它看起来像这样。
@app.route('/teacher/tasks/new')
@login_required
def new_hw_task():
classes = Class.query.filter_by(userid=current_user.userid).all()
form = NewTaskForm()
form.classes.choices = classes
return render_template('/teacher/new_hw_task.html', form=form)
我对 Python 和 Flask 相对缺乏经验,并且一直在尝试将变量传递给 WTForms class。
这是我拥有的:
views.py
@app.route('/teacher/tasks/new')
@login_required
def new_hw_task():
classes = Class.query.filter_by(userid=current_user.userid).all()
form = NewTaskForm(classes = classes)
return render_template('/teacher/new_hw_task.html', form=form)
forms.py
class NewTaskForm(FlaskForm):
classes = SelectMultipleField('Select classes to assign this homework to', choices = [("1", "Class 1"), ("2","Class 2")])
new_hw_task.html
<div class="form-group">
{{ form.classes.label }}
{{ form.classes(class_="form-control selectpicker", placeholder=form.classes.description, title="Select at least one class to assign", show_tick=true)}}
</div>
我想要 classes
变量(在 models.py 中定义的 Class
class 的实例 - 是的,是的,我知道在 forms.py 中访问一个名为 'Class') 的 class 是多么草率,这样我就可以用 [=] 中的选项替换 SelectMultipleField
中的选项14=]。但是,我找不到通过它的方法(你可以看到我已经尝试将 classes=classes
放入 NewTaskForm 之后的括号中)。
实际上,我的首选方法是从 forms.py[ 中简单地访问 current_user
(由 flask_login 设置的基于会话的对象) =41=],但我似乎也无法做到这一点,即使我在文件顶部导入 current_user。
请问有谁能给我解释一下哪里错了吗?
SelectField
的 WTForms 文档解释了如何将变量从视图传递到表单中。就像将选项列表分配给 form.field.choices
一样简单。反过来,您从字段构造函数中删除 choices=
关键字参数。
根据您的情况进行调整,它看起来像这样。
@app.route('/teacher/tasks/new')
@login_required
def new_hw_task():
classes = Class.query.filter_by(userid=current_user.userid).all()
form = NewTaskForm()
form.classes.choices = classes
return render_template('/teacher/new_hw_task.html', form=form)