将SelectField添加到模板时,烧瓶WTF表单终止

时间:2019-01-17 17:59:04

标签: python flask flask-wtforms

我在烧瓶中有一个wtf形式:


class CustomerForm(FlaskForm):
    customer_id = StringField('System ID')
    crm_id = IntegerField('ID', validators=[DataRequired()])
    customer_name = StringField('Customer Name', validators=[DataRequired()])
    alias = StringField('Alias', validators=[DataRequired()])
    phone = StringField('Phone')
    address = StringField('Address')
    default_timezone = SelectField('Default Time Zone', validators=[DataRequired()],
        choices=pytz.common_timezones
    )

@customers_page.route('/customer/<customer_id>', methods=["GET"])
@customers_page.route('/customer/', defaults={'customer_id': '-1'}, methods=["GET"])
@flask_login.login_required
def customer_page(customer_id):
    form = CustomerForm()

    return render_template('customer.html', 
        form=form
    )

模板如下:

{% extends "main.html" %}

{% block content %}

<div class="app-content">
    <h1>View/Edit/Delete Customer {{ customer.customer_id }}</h1>
    <form action="{{ url_for('customers_page.customer_save') }}" method="post">
        {{ form.crm_id(readonly=true) }}
        {{ form.customer_name }}
        {{ form.alias }}
        {{ form.phone }}
        {{ form.address }}
        {{ form.default_timezone }}

        {{ form.csrf_token }}
    </form>
</div>

{% endblock %}

当我将SelectField form.default_timezone 添加到模板时,浏览页面将终止应用程序,而不会出现错误,异常或调试消息。如果我省略了SelectField,那就可以了!知道出了什么问题吗?

更新

就解决了!似乎需要将选择指定为空列表或具有[(a,b)]形式(元组列表)的列表,以使其起作用。我将代码更改为pytz.common_timezones中x的 choices = [(x,x)] ,它解决了问题。

1 个答案:

答案 0 :(得分:0)

就解决了!似乎需要将选择指定为空列表或具有[(a,b)]形式(元组列表)的列表,以使其起作用。我将代码更改为

default_timezone = SelectField('Default Time Zone', validators=[DataRequired()], 
          choices=[(x, x) for x in pytz.common_timezones])

它可以解决问题。