【问题标题】:How to access Form field data passed at init in QuerySelectField of another field如何在另一个字段的QuerySelectField中访问初始化传递的表单字段数据
【发布时间】:2014-02-15 08:43:07
【问题描述】:

我有这个代码:

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] 值,我通过 route 中的 obj_task_new 发送该值。 py


我也试过

 QuerySelectField(query_factory=CustomFunction,...

但我发现无法向其传递参数,即使我确实找到了传递参数的方法,访问 user_id 值的问题仍然存在。

谢谢,

【问题讨论】:

    标签: python flask wtforms


    【解决方案1】:

    你有两个选择:

    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)
      

    【讨论】:

    • 非常感谢,这两个选项都有效。我曾一度对请求有相同的想法,但我想我没有正确实现它(如果我这样做了,我会节省很长时间的搜索......)
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2018-06-20
    • 2017-03-04
    • 2010-12-25
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多