我想更改一些使用flask_admin
的现有Python代码。其中一个视图使用inline_models
和(ClassName, Options)
声明模式。内联类具有文本字段等。
我想通过以下方式更改flask_admin默认行为:
我做了一些谷歌搜索,但任何看起来很有希望的东西看起来也非常重要。我希望有一些合理的直接方式来实现这一目标。
非常感谢您的帮助。
答案 0 :(得分:4)
Yeesh。看起来我们在这里记录在一个记录不佳的领域。我很难知道我是否已经改进了你已经找到的东西,但我希望你能找到比编写自定义管理视图模板更容易的东西。< / p>
在调用之后,看起来最终会将选项字典传递给InlineBaseFormAdmin的构造函数,其中提取和应用了各种form_* keys(不确定所有都被尊重,但我看到了至少form_base_class, form_columns, form_excluded_columns, form_args, form_extra_fields, form_rules, form_label, form_column_labels, form_widget_args
)。我认为您可以通过form_widget_args
完成所需的工作,但您也可以通过form_rules
或覆盖InlineBaseFormAdmin的get_form
或postprocess_form
方法来实现目标:< / p>
class SomeModelView(MyBaseModelView):
...
inline_models = [(db.SomeOtherModel, {
"form_widget_args": {
"uneditable_field_name": {"readonly": True}
}
})]
...
可以通过提供自己的内联表单模型来覆盖display_row_controls
来控制删除选项:
from flask_admin.contrib.sqla.form import InlineModelConverter
from flask_admin.contrib.sqla.fields import InlineModelFormList
class CrouchingTigerHiddenModelFormList(InlineModelFormList):
def display_row_controls(self, field): return False
class MyInlineModelConverter(InlineModelConverter):
inline_field_list_type = CustomInlineModelFormList
#adding to above example
class SomeModelView(MyBaseModelView):
...
inline_model_form_converter = MyInlineModelConverter
inline_models = [(db.SomeOtherModel, {
"form_widget_args": {
"uneditable_field_name": {"readonly": True}
}
})]
...
注意:小部件args,例如readonly,正在以render_kw的形式传递给wtforms,但是一见不醒,WTForms文档并不清楚这些在结果HTML输入中表示为属性元素(所以任何HTML input element attributes在这里都有效)。
看起来form.js控制了这种行为,因此您应该能够修补其addInlineField
方法,以便在添加模型之前或之后执行您自己的代码。您可以为此覆盖创建和/或编辑模板 - 但如果您使用flask-admin 1.5.0+,这可能就像将extra_js = ["your-custom.js"]
添加到视图类一样简单(注意:它看起来这个脚本包含在此视图的每个页面上。)