Я сделал простую форму с помощью Flask-admin, которая выглядит следующим образом. Сейчас я пытаюсь создать кнопку обновления рядом с текстовым полем API, но не знаю, как это сделать.
Это называется виджет или встроенная модель? Я также не смог найти кнопку в WTForms, которую я мог бы использовать. Буду признателен за любые примеры по этому поводу, поскольку я смог переопределить текстовые поля, но не мог легко разместить рядом с ним другие элементы.
class AdministratorView(sqla.ModelView): page_size = 10
column_searchable_list = (
'username',
'description'
)
column_list = (
'username',
'apikey',
'description',
'active'
)
column_exclude_list = list = (
'apikey',
'auth_type'
)
form_excluded_columns = (
'auth_type',
'photos'
)
column_labels = {
'apikey': 'API Key'
}
form_widget_args = {
'apikey':{
'readonly':True
}
}
form_create_rules = (
rules.FieldSet(('username', 'password', 'description'), 'Personal'),
rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'),
)
form_edit_rules = (
rules.FieldSet(('username', 'description'), 'Personal'),
rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'),
rules.Header('Reset password'),
rules.Field('new_password')
)
def get_create_form(self):
form = self.scaffold_form()
form.username = fields.StringField('Username', [validators.Required()])
form.password = fields.PasswordField('Password', [validators.Required()])
return form
def get_edit_form(self):
form = self.scaffold_form()
delattr(form, 'password')
form.new_password = fields.PasswordField('New Password')
return form
def on_model_change(self, form, model, is_created):
if is_created is False:
if form.new_password.data:
model.password = generate_password_hash(form.new_password.data)
def is_accessible(self):
if login.current_user.is_authenticated:
return login.current_user.has_role('admin')
Редактировать: я могу добавить новый элемент, например заголовок/h1, добавляя html-файл следующим образом:
{% extends 'admin/model/edit.html' %}
{% block body %}
<h1>My custom header</h1>
{{ super() }}
{% endblock %}
Однако я не могу понять, как внести изменения в определенные поля в отображаемой форме. Глядя на edit.html, я вижу следующее. Как мне «попасть внутрь» rendered_form и добавить свою пользовательскую кнопку?
{% block edit_form %}
{{ lib.render_form(form, return_url, extra(), form_opts) }}
{% endblock %}
{% extends 'admin/edit_user.html' %}
для другого. - person MrLeeh   schedule 27.11.2016