Flask-admin在文本字段旁边创建一个按钮

时间:2016-11-23 13:12:10

标签: python flask-admin

我使用Flask-admin创建了一个简单的表单,如下所示。我现在正在考虑在API文本字段旁边创建一个刷新按钮,但现在还不知道如何。

这称为小部件还是内联模型?我无法在WTForms中找到一个我可以使用的按钮。非常感谢这方面的任何例子,因为我能够覆盖文本字段,但不能轻松地将其他元素放在旁边。

enter image description here     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所有我能看到的是以下内容。我如何进入内部&#34; rendered_form并添加我的自定义按钮?

{% block edit_form %}
    {{ lib.render_form(form, return_url, extra(), form_opts) }}
  {% endblock %}

2 个答案:

答案 0 :(得分:2)

只需使用lib.render_form_fields功能渲染普通字段,然后将按钮添加到所需位置即可。您可以将render_form_fields与多个字段一起使用,因此您无需重写整个模板。 以下是 flask-admins layout_bootstrap3示例的修改版本,它将按钮放在名称字段附近:

{% extends 'admin/model/edit.html' %}

{% block brand %}
    <h2 id="brand">Edit {{ admin_view.name|capitalize }}</h2>
    <div class="clearfix"></div>
    <hr>
{% endblock %}

{% block body %}
  {% call lib.form_tag(form) %}
    <div class="row">
      <div class="col-xs-10">
        {{ lib.render_form_fields([form.name])}}
      </div>
      <div class="col-xs-2">
        <a href="#" class="btn btn-default">Testbutton</a>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-10">
        {{ lib.render_form_fields([form.email])}}
      </div>
    </div>
    <div class="form-buttons">
      {{ lib.render_form_buttons(return_url) }}
    </div>
  {% endcall %}
{% endblock %}

答案 1 :(得分:0)

在自定义视图上使用form_edit_rules,以使用rules.HTML规则添加HTML。

例如:

form_edit_rules = (
    rules.FieldSet(('username', 'description'), 'Personal'),
    rules.FieldSet(('roles', 'apikey', 'active'), 'Permission'),
    rules.HTML('<button onclick="alert('hello')">Refresh</button>'),
    rules.Header('Reset password'),
    rules.Field('new_password')
)