gpt4 book ai didi

python - flask_admin 改变 inline_models 行为

转载 作者:行者123 更新时间:2023-11-28 22:28:04 25 4
gpt4 key购买 nike

我想更改一些使用 flask_admin 的现有 Python 代码。其中一个 View 使用 inline_models(ClassName, Options) 声明模式。内联类有一个文本字段。我想通过以下方式更改 flask_admin 默认行为:

  • 我想将文本字段设置为只读。 IE。仍然显示它,但阻止用户更改现有内容。
  • 我不想让用户删除内联类的实例,即我想去掉“删除?”每个条目旁边的复选框。
  • 我想用一些自定义 JavaScript 覆盖默认的“添加项目”按钮行为。

我用谷歌搜索了一下,但任何看起来有潜力的东西看起来都非常重要。我希望有一些合理直接的方法来实现这一目标。

非常感谢您的帮助。

最佳答案

是的。看起来我们在记录不完整的领域,在这里。很难知道我是否在改进您已经发现的内容,但我希望您正在寻找比编写自定义管理 View 模板更容易的东西。

  1. 调用之后,选项字典似乎最终传递给了 InlineBaseFormAdmin 的构造函数哪里有各种form_* keys被提取和应用(不确定所有的都被尊重,但我至少看到我认为你可以通过 form_widget_args 完成你需要的,但你也可以通过 form_rules 或覆盖 InlineBaseFormAdmin 的 get_form postprocess_form 方法:

    class SomeModelView(MyBaseModelView):
    ...
    inline_models = [(db.SomeOtherModel, {
    "form_widget_args": {
    "uneditable_field_name": {"readonly": True}
    }
    })]
    ...
  2. 可以通过提供您自己的内联表单模型来覆盖 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}
    }
    })]
    ...

    注意:小部件参数(例如只读)将作为 render_kw 传递给 wtforms。 ,但 WTForms 文档并不清楚这些在生成的 HTML 输入元素中表示为属性(因此任何 HTML input element attributes 在这里都是有效的)。

  3. 看起来像form.js控制此行为,因此您应该能够对其 addInlineField 方法进行猴子修补,以在添加模型之前或之后执行您自己的代码。您可以为此覆盖创建和/或编辑模板——但如果您使用的是 flask-admin 1.5.0+,这可能就像添加 extra_js = ["your-custom.js"] 到 View 类(注意:看起来这个脚本包含在这个 View 的每个页面上)。

关于python - flask_admin 改变 inline_models 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43773654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com