Формы Flask WTF завершаются, когда в шаблон добавляется SelectField - PullRequest
0 голосов
/ 17 января 2019

У меня есть форма 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)] (список кортежей), чтобы он работал.Я изменил код, чтобы он был похож на choices = [(x, x) для x в pytz.common_timezones] , и это решает проблему.

1 Ответ

0 голосов
/ 17 января 2019

Только что решено! Похоже, вам нужно указать выборы как пустой список или список с формой [(a, b)] (список кортежей), чтобы он работал. Я изменил код, чтобы быть похожим на

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

и это решает проблему.

...