Flask обновить объект в форме
Привет.
Есть форма запроса, в ней есть поля, которые она забирает из ldap. Например, список общих почтовых ящиков (mail_boxes), к которым пользователь должен получить доступ. Но если я в ldap добавляю новый ящик, который должен отображаться в форме, то он появляется только если перезапустить приложение.
Те есть класс UserForm и его переменные не обновляются при запросе. Как бы их насильно обновлять?
models.py
class UserForm(FlaskForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
mail_boxes = Select2MultipleField(u"Zugriff auf Mailkonto", [],
choices=get_mail_boxes(),
description=u"X2",
render_kw={"multiple": "multiple"})
#views.py
@request_new_user.route('/', methods= ["GET", "POST"])
@roles_accepted('control_admin', 'control_create_user')
@login_required
def request_form():
form = UserForm()
if form.validate_on_submit():
form_data = {}
for key in request.form.keys():
values = request.form.getlist(key)
if len(values) == 1:
form_data[key] = values[0]
else:
form_data[key] = values
form_data = format_form_data(form_data)
return render_template('result.html', form_data=form_data)
return render_template('form.html', form=form , title='Anforderung zum Anlegen eines neuen Benutzers' )
#form.html
{{ form.mail_boxes.label }}
{{ form.mail_boxes(class_="form-control") }}
...
<script type="text/javascript">document.addEventListener("DOMContentLoaded", function () {
$("#mail_boxes").select2();
});
#models.py
def get_mail_boxes():
search_base = 'cn=users,dc=xxx,dc=com'
search_filter = '(&(uid=mail_*))'
attr = ['mailPrimaryAddress', 'uid']
conn = get_bound_connection()
conn.search(search_base, search_filter, attributes=attr)
if len(conn.entries) < 1:
return False
result = []
for item in conn.entries:
mail = getattr(item, 'mailPrimaryAddress', False)[0]
uid = getattr(item, 'uid', False)[0]
result.append(tuple((uid, mail)))
return result