如何解决TypeError: __init__()仅接受1个位置参数却传入2个的问题
错误原因及解决方法
错误原因
你遇到的TypeError是因为Flask-WTF版本迭代导致的初始化方式变化。3年前的教程使用的旧版Flask-WTF(如0.14.x及更早版本)要求初始化表单时传入request.form,但当前新版本的Flask-WTF(0.15+)中,表单类的__init__方法已不再接受该参数,仅需默认的self这一个位置参数,所以你传入第二个参数request.form就会触发错误。
解决方法
直接修改路由中的表单初始化代码:
- 原代码:
form = AddLocation(request.form) - 修改为:
form = AddLocation()
新版本Flask-WTF的表单会自动从请求上下文(如POST请求的request.form)中获取数据,后续你只需要正常调用form.validate_on_submit()进行验证即可,逻辑和之前注册功能的代码保持一致。
如果需要手动填充表单数据(比如编辑场景),可以使用form.populate_obj(your_object)方法,或者直接给表单字段赋值(如form.name.data = "xxx")。
内容的提问来源于stack exchange,提问作者Vracar
相关产品推荐
相关产品推荐

