python - flask wtforms-alchemy QuerySelectField ValueError: 太多值无法解压(预期为 2)
问题描述
我正在尝试使用flask-wtf创建注册表单,并在此表单上创建wtforms-alchemy 我尝试创建选择字段,其值是从我的模型中查询的。但我总是得到这个错误:
ValueError: too many values to unpack (expected 2)
这是我的代码:
from flask_wtf import FlaskForm
from wtforms_sqlalchemy.fields import QuerySelectField
def choose_domicile():
return Domicile.query
class RegisterForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
domicile = QuerySelectField(u'Domicile', query_factory=choose_domicile)
@app.route('/signup', methods=['GET', 'POST'])
def signup():
form = RegisterFormView()
try:
if form.validate_on_submit():
new_user = Data(name=form.name.data, domicile=form.domicile.data)
db.session.add(new_user)
db.session.commit()
return "Success"
except:
return "Failed"
return render_template('signup.html', form=form)
这是我的signup.html:
{% block content %}
<div class="container">
<form class="form-signin" method="POST" action="/signup">
<h2 class="form-signin-heading">Sign Up</h2>
{{ form.hidden_tag() }}
{{ wtf.form_field(form.name) }}
{{ form.domicile }}
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
</form>
</div>
{% endblock %}
我的包版本是flask-wtf==0.14.2和wtforms-alchemy==0.16.7
我尝试遵循这个为什么 Flask WTForms 和 WTForms-SQLAlchemy QuerySelectField 会产生太多无法解包的值?,但我仍然很困惑如何做到这一点。
解决方案
您可以定义如下函数,该函数可以作为 get_pk 参数传递。
def get_pk(obj):
return str(obj)
然后进行以下更改
domicile = QuerySelectField(u'Domicile', query_factory=choose_domicile, get_pk=get_pk)
我假设您已经__str__
在模型类中定义,否则在 get_pk 中返回 pk
推荐阅读
- c - 当应用于链表中的指针时,AND 运算符是什么意思?
- c# - 如何使用@Html.ActionLink 显示带参数的索引视图?
- javascript - 用服务器端渲染反应路由器模式路由
- javascript - 奇怪的javascript循环行为
- android-fragments - 在片段中使用 RecyclerView 时询问权限时应用程序崩溃
- facebook - 如何通过facebook api获取其他人对我的帖子的评论
- image - 使用 imagesc 函数查看矩阵的不同平面
- javascript - Javascript 无法提醒字典
- javascript - 如何使用 javascript 微软认证?
- java - Spring 不显示 home.html