Я создаю форму для поиска других членов группы, где все участники принадлежат к отделам.Некоторые отделы, но не все отделы, имеют внутренний идентификатор, который можно использовать для идентификации каждого члена.В каждом отделе также есть свой термин для этого внутреннего идентификатора участника.Отдел 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, используя значение, выбранное из предыдущего поля
Спасибо за чтение!