2016-11-23 4 views
2

다음과 같은 Flask-admin을 사용하여 간단한 양식을 만들었습니다. 현재 API 텍스트 필드 옆에 새로 고침 버튼을 만드는 방법을 살펴보고 있지만 실제로는 방법이 없습니다.Flask-admin은 텍스트 필드 옆에 버튼을 만듭니다.

위젯 또는 인라인 모델이라고 할 수 있습니까? 내가 사용할 수있는 WTForms에서 버튼을 찾을 수 없었습니다. 텍스트 필드를 재정의 할 수 있었지만 다른 요소를 쉽게 배치 할 수는 없으므로 이에 대한 예제를 알려 주시면 감사하겠습니다.

enter image description here 클래스 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') 

편집 : 나는 이와 같은 HTML 파일을 추가 헤더/H1으로 새로운 요소를 추가 할 수 있어요 :

{% 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 %} 
+0

오히려 : 여기 는 플라스크-관리자 이름 필드에 버튼 가까이 배치 layout_bootstrap3 예를의 수정 된 버전입니다 , 검색하여 화면 판독기 사용자가 읽은 다음 필요할 경우 수정 및 테스트 용으로 복사하여 답을 제공합니다. –

+0

admin 템플리트에 추가 버튼을 추가하려면 기본 템플리트를 대체하고 상속 된 템플리트에 단추를 추가해야합니다. https://flask-admin.readthedocs.io/en/v1.0.4/templates/ – MrLeeh

+0

하나의 단일 필드에 대한 재정의를 만들 수 있습니까? 편집과 create.html을 모두 오버라이드 할 수 있습니다. – NeoID

답변

0

그냥 일반 필드를 렌더링하고 당신이 그것을 원하는 버튼을 추가 할 lib.render_form_fields 기능을 사용합니다. render_form_fields을 여러 필드와 함께 사용할 수 있으므로 전체 템플릿을 다시 작성할 필요가 없습니다. 이 인덱싱 할 수 있도록 적절하게 질문에 코드를 붙여 주시기 바랍니다 스크린 샷을 사용하는 것보다

{% 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 %}