Как получить доступ к данным формы в форме Flask_WTF до ее отправки? - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю форму для поиска других членов группы, где все участники принадлежат к отделам.Некоторые отделы, но не все отделы, имеют внутренний идентификатор, который можно использовать для идентификации каждого члена.В каждом отделе также есть свой термин для этого внутреннего идентификатора участника.Отдел A называет его «личным идентификатором», отдел B называет его «уникальным идентификатором» и т. Д. В таблице departments базы данных в поле member_id_term хранится то, что отдел называет внутренним идентификатором члена.В таблице members в базе данных internal_id хранит элементы internal_id, если они принадлежат к отделу с системой internal_id.

На первой странице формы пользователь выбираетотдел и на второй странице формы, если пользователь выбрал отдел, который использует внутренние идентификаторы участников, его просят ввести внутренний идентификатор участника.

Моя стратегия заключалась в создании переменной в views.py вызывается member_id_term и устанавливается в 0, если form.dept.data отсутствует, но для member_id_term устанавливается form.dept.data.member_id_term, когда существует form.dept.data.Затем в input_find_member.html я бы условно отобразил поле ввода для internal_id, если существует member_id_term.

Проблема : у меня нет доступа к form.dept.data, пока яотправить форму.Как я могу получить доступ к этому значению перед отправкой формы?

Вот код, который у меня есть на данный момент.Выдает ошибку на member_id_term = 0 if not form.dept.data else form.dept.data.member_id_term и говорит, что form.dept.data - это ничто.

forms.py

class FindMemberForm(Form):
    name = StringField(
        'name', default='', validators=[Regexp('\w*'), Length(max=50),
                                        Optional()]
    )
    internal_id = StringField('internal_id', default='', validators=[Regexp('\w*'), Length(max=55)])
    dept = QuerySelectField('dept', validators=[DataRequired()],
                            query_factory=dept_choices, get_label='name')

views.py

@main.route('/find', methods=['GET', 'POST'])
def get_officer():
    form = FindMemberForm()
    member_id_term = 0 if not form.dept.data else form.dept.data.member_id_term

    if form.validate_on_submit():
        return redirect(url_for('main.get_gallery'), code=307)
    return render_template('input_find_member.html', form=form)         

{% extends "base.html" %}
{% block content %}

и вотinput_find_member.html

<div role="main">
    <div class="hero-section no-sub">
        <div class="hero">Find a Member </div>
    </div>
</div>

<div class="container" role="main">

  <form action="{{ url_for('main.get_member') }}" method="post" class="form">
  {{ form.hidden_tag() }}
      <div class="row form-group">
        <div class="col-xs-12">
            <ul class="nav nav-pills nav-justified thumbnail setup-panel">
                <li class="active"><a href="#step-1">
                    <h4 class="list-group-item-heading">Step 1</h4>
                    <p class="list-group-item-text">Department Information</p>
                </a></li>
                <li class="disabled"><a href="#step-2">
                    <h4 class="list-group-item-heading">Step 2</h4>
                    <p class="list-group-item-text">Member Info </p>
                </a></li>
            </ul>
        </div>
    </div>
    <div class="row setup-content" id="step-1">
        <div class="col-xs-12">
            <div class="col-md-12 well text-center">
                <h2><small>Select Department</small></h2>
                <div class="input-group input-group-lg col-md-4 col-md-offset-4">
                {{ form.dept(class="form-control") }}
                </div>

                {% for error in form.dept.errors %}
                <p>
                  <span style="color: red;">[{{ error }}]</span>
                </p>
                {% endfor %}

                <br>
                <button id="activate-step-2" class="btn btn-primary btn-lg">Next Step</button>
            </div>
        </div>
    </div>
    <div class="row setup-content" id="step-2">
        <div class="col-xs-12">
            <div class="col-md-12 well text-center">
                <h2><small>Do you know the member's name?</small></h2>
                <div class="input-group input-group-lg col-md-4 col-md-offset-4">
                  {{ form.name(class="form-control") }}
                  {% for error in form.name.errors %}
                      <p><span style="color: red;">[{{ error }}]</span></p>
                  {% endfor %}
                </div>

                {% if member_id_term %}
                    <h2><small>Do you know the member's {{ member_id_term }}?*</small></h2>
                    <div class="input-group input-group-lg col-md-4 col-md-offset-4">
                    {{ form.internal_id(class="form-control") }}
                    {% for error in form.internal_id.errors %}
                        <p><span style="color: red;">[{{ error }}]</span></p>
                    {% endfor %}
                    </div>
                {% endif %}
                <br>
                <button id="activate-step-3" class="btn btn-primary btn-lg">Next Step</button>
            </div>
        </div>
    </div>
  </form>
</div>

Я уже читал эти страницы
Flask WTForms: как мне вернуть значение формы обратно в Python?
Получить данныеиз формы WTForms
заполнить поле выбора WTForms, используя значение, выбранное из предыдущего поля

Спасибо за чтение!

...