简体   繁体   English

烧瓶 wtforms-alchemy QuerySelectField ValueError:解压的值太多(预期为 2)

[英]flask wtforms-alchemy QuerySelectField ValueError: too many values to unpack (expected 2)

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.我正在尝试使用flask-wtfwtforms-alchemy在此表单上创建注册表单我尝试创建selectfield,其值是从我的模型中查询的。 but i'am always get this error:但我总是收到这个错误:

 ValueError: too many values to unpack (expected 2)

this my code :这是我的代码

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)

and this my signup.html :这是我的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 %}

my package versions is flask-wtf==0.14.2 and wtforms-alchemy==0.16.7我的包版本是flask-wtf==0.14.2wtforms-alchemy==0.16.7

i have try to follow this Why does Flask WTForms and WTForms-SQLAlchemy QuerySelectField produce too many values to unpack?我已经尝试按照这个为什么 Flask WTForms 和 WTForms-SQLAlchemy QuerySelectField 产生太多的值来解压? , but i am still confused how to do that. ,但我仍然困惑如何做到这一点。

You can define a function as following which can be passed as a get_pk paramater.您可以定义如下函数,该函数可以作为 get_pk 参数传递。

def get_pk(obj):
    return str(obj)

and then do the following change然后进行以下更改

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

I am assuming that you have define __str__ in model class else return pk in get_pk我假设你在模型类中定义了__str__否则在 get_pk 中返回 pk

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM