flask wtforms-alchemy QuerySelectField ValueError:太多值无法解包(预期2) [英] flask wtforms-alchemy QuerySelectField ValueError: too many values to unpack (expected 2)

查看:209
本文介绍了flask wtforms-alchemy QuerySelectField ValueError:太多值无法解包(预期2)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 flask-wtf wtforms-alchemy 创建注册表单 在此表单上,我尝试创建selectfield,该值是从我的模型中查询的. 但我总是会收到此错误:

i am trying to create sign up form using flask-wtf, and wtforms-alchemy on this form i try create selectfield, which the value is query from my models. but i'am always get this error:

 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产生太多无法解包的值?,但是我仍然很困惑如何做到这一点.

i have try to follow this Why does Flask WTForms and WTForms-SQLAlchemy QuerySelectField produce too many values to unpack? , but i am still confused how to do that.

推荐答案

您可以定义以下函数,并将其作为get_pk参数传递.

You can define a function as following which can be passed as a get_pk paramater.

def get_pk(obj):
    return str(obj)

然后进行以下更改

domicile = QuerySelectField(u'Domicile', query_factory=choose_domicile, get_pk=get_pk)

我假设您已经在模型类中定义了__str__,否则在get_pk中返回pk

I am assuming that you have define __str__ in model class else return pk in get_pk

这篇关于flask wtforms-alchemy QuerySelectField ValueError:太多值无法解包(预期2)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆