如何访问另一个字段的QuerySelectField中init传递的表单字段数据

时间:2014-02-15 08:43:07

标签: python flask wtforms

我有这段代码:

route.py

中的

@app.route('/task/<param_userid>', methods=['GET', 'POST'])
def task_new(param_userid=None):
    ...
    obj_task_new = {'user_id': param_userid}
    form = FormTask(**obj_task_new)
    ...
forms.py

中的

class FormTask(Form):
    user_id = fields.TextField('UID',validators=[validators.required()])
    group = QuerySelectField(query_factory=lambda: db.session.query([MODEL]).filter_by(user_id_field=[USER_ID]), allow_blank=False)
    ...

其中 [MODEL] db.Model 类(不要认为它与此相关)


我需要的是从 user_id 动态传递的 [USER_ID] 值,我通过路由中的 obj_task_new 发送。吡啶


我也试过

 QuerySelectField(query_factory=CustomFunction,...

但是我发现无法将参数传递给它,即使我找到了传递参数的方法,访问 user_id 值的问题仍然存在。

谢谢,

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 您可以在运行时在控制器中设置字段上的查询:

    form = FormTask(**obj_task_new)
    form.group.query = db.session.query([MODEL]).filter_by(user_id_field=[param_userid]), allow_blank=False)
    
  2. 您可以利用request是线程本地的事实并在您的自定义函数中使用它:

    def for_current_user():
        user_id = request.view_args.get('param_userid')
        return db.session.query([MODEL]).filter_by(...)
    
    # And then in your form definition
    QuerySelectField(query_factory=for_current_user)