Car*_*ten 3 python flask flask-admin
我想更改一些现有的使用flask_admin. 其中一种视图inline_models与(ClassName, Options)声明模式一起使用。内联类有一个文本字段。我想通过以下方式更改 flask_admin 默认行为:
我做了一些谷歌搜索,但任何看起来有潜力的东西看起来也很重要。我希望有一些合理直接的方法来实现这一目标。
您的帮助将不胜感激。
是的。在这里,我们似乎处于记录不足的领域。很难知道我是否在改进您已经发现的内容,但我希望您正在寻找比编写自定义管理视图模板更容易的东西。
在调用之后,看起来选项字典最终被传递给InlineBaseFormAdmin的构造函数,在那里提取和应用了各种form_* 键(不确定所有键都被尊重,但我至少看到了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或覆盖 InlineBaseFormAdminget_form或postprocess_form方法来实现:
class SomeModelView(MyBaseModelView):
...
inline_models = [(db.SomeOtherModel, {
"form_widget_args": {
"uneditable_field_name": {"readonly": True}
}
})]
...
Run Code Online (Sandbox Code Playgroud)可以通过提供您自己的内联表单模型来控制删除选项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}
}
})]
...
Run Code Online (Sandbox Code Playgroud)
注意:小部件 args,例如 readonly,正在作为render_kw传递给 wtforms ,但是 WTForms 文档不清楚这些在结果 HTML input 元素中被表示为属性(因此任何HTML input 元素属性都是此处有效)。
看起来form.js控制了这种行为,因此您应该能够addInlineField在添加模型之前或之后对其方法进行猴子修补以执行您自己的代码。您可以为此覆盖创建和/或编辑模板——但是如果您使用的是flask-admin 1.5.0+,这可能就像添加extra_js = ["your-custom.js"]到视图类一样简单(注意:看起来这个脚本被包含在此视图的每个页面)。