【问题标题】:SQL Alchemy/ Flask / WTF Forms set a default value for a queryselectfieldSQL Alchemy/Flask/WTF Forms 为查询选择字段设置默认值
【发布时间】:2017-07-05 08:47:36
【问题描述】:

我想为我的查询选择字段设置一个默认值。我的代码如下所示:

模板:

{% import "bootstrap/utils.html" as utils %}
{% import "bootstrap/wtf.html" as wtf %}
{% extends "base.html" %}
{% block title %}Request{% endblock %}
{% block body %}
<div class="content-section">
...
{{ form.country(class_="selectformfield") }
...

路线:

@requests.route('/request/add', methods=['GET', 'POST'])
@login_required
def add_request():

check_admin()

add_request = True

form = RequestForm()
if form.validate_on_submit():
    ...
    Country = form.hostname.data
    ...

    request = Request(...country=country, ...)

    try:
        # add request to the database
        db.session.add(request)
        db.session.commit()
        flash('You have successfully added a new request.')
    except:
        # in case request name already exists
        flash('Error: request already exists.')

    # redirect to the request page
    return redirect(url_for('requests.show_request', id=request.id))

# load request template
return render_template('requests/add_request.html', add_request=add_request,
                       form=form, title='Add new Request')

表格:

class RequestForm(FlaskForm):
...
country = QuerySelectField(query_factory=lambda: Country.query.all(), get_label="name")
...

我已经这样尝试过了,但是没有用。

default_country = query_factory=lambda: Country.query.filter(Country.id == '1')
country = QuerySelectField(query_factory=lambda: Country.query.all(), get_label="name", default=default_country)

SQLAlchemy/WTForms: set default selected value for QuerySelectField 我也已经在这里阅读了这篇文章,有一个类似的问题,但该解决方案对我不起作用。 谁能帮帮我?

【问题讨论】:

  • 你能解释一下是什么问题吗?你看到任何错误吗?尝试将FlaskForm 更改为from flask_wtf import Form
  • 执行我的方法时没有错误。它只是没有将 id 1 的值设置为默认值。不幸的是,这是一个与工作相关的问题,我要到下周才能访问代码,但我肯定会尝试你的建议,然后会回复你。
  • 对了,你能把你的模板+路由添加到问题吗?
  • 对不起,我的回复晚了,我编辑了上面的帖子并添加了代码。很遗憾,您的第一个建议没有帮助。

标签: python flask sqlalchemy wtforms


【解决方案1】:

试试这个:

default=lambda: Country.query.filter(Country.id == '1').one_or_none())

这里是你的字段定义的完整代码:

country = QuerySelectField(query_factory=lambda: Country.query.all(), get_label="name", default=lambda: Country.query.filter(Country.id == '1').one_or_none())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2020-12-13
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多