You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-Admin:如何在validate_form中获取正在编辑的对象

在Flask-Admin的validate_form中获取编辑对象

在Flask-Admin的ModelView中,编辑操作时当前正在修改的对象会被存储在self._edit_obj属性中,你可以直接在validate_form方法内访问它。

需要注意:

  • 处于编辑模式时,self._edit_obj是当前要修改的模型实例
  • 处于新增模式时,self._edit_obj为None,使用前建议先做判断

修改你的代码如下:

class ShiftModelView(ModelView):
    """ModelView to manage Shift model."""

    def validate_form(self, form) -> bool:
        """Validate form."""
        if not super().validate_form(form):
            return False

        if form.scheduled_from.data >= form.scheduled_to.data:
            message = (
                "'Scheduled From' cannot be greater than or equal to 'Scheduled To'"
            )
            flash(message, "error")
            return False
        
        # 获取正在编辑的对象
        edited_obj = self._edit_obj
        if edited_obj is not None:
            # 这里添加基于编辑对象的自定义验证逻辑
            # 示例:检查编辑后的时间是否早于原对象的创建时间
            if form.scheduled_from.data < edited_obj.created_at:
                flash("Scheduled From cannot be earlier than shift creation time", "error")
                return False
        
        return True

self._edit_obj是Flask-Admin内部用于暂存编辑实例的属性,在编辑页面加载完成后会自动赋值,无需额外配置。

内容的提问来源于stack exchange,提问作者lmiguelvargasf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:06:25