【问题标题】:Passing a variable into a WTForms class将变量传递给 WTForms 类
【发布时间】:2020-01-05 19:51:38
【问题描述】:

我对 Python 和 Flask 相对缺乏经验,并且一直在尝试将变量传递给 WTForms 类。

这是我所拥有的:

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 中访问,以便我可以将 SelectMultipleField 中的选项替换为 classes 中的选项。但是,我找不到通过它的方法(您可以看到我已经尝试将 classes=classes 放入 NewTaskForm 之后的括号中)。

实际上,我首选的方法是从 forms.py 中简单地访问 current_user(flask_login 设置的基于会话的对象),但我似乎无法做到即使我在文件顶部导入 current_user 也是如此。

请问有人能解释一下我哪里出错了吗?

【问题讨论】:

    标签: python flask flask-wtforms flask-login


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多