如何在 `flask-admin` 中强制执行约束?

How to enforce constraints in `flask-admin`?

我们正在使用 http://flask-admin.readthedocs.org/ 作为快速管理界面。 我们的模型具有如下定义的约束:

__table_args__ = (
        db.UniqueConstraint(user_id, role, domain_id),
        db.UniqueConstraint(user_id, role, customer_id),
        )

在调试模式下保存违反约束的记录时,应用会停止并出现回溯。如果不处于调试模式,它会在一条快速消息中报告错误并回滚事务。

这是期望的行为(即闪现消息和回滚)。用户做错了一些事情并避免输入错误数据:这不是应该显示回溯的错误。

Flask 优雅地处理此类异常的正确方法是什么?我应该覆盖 ModelView{create,update,delete}_model 方法吗?

您可以实现on_model_change和on_model_delete功能。因此,您可以检查数据是否唯一,并在不满足约束条件的情况下提供更加用户友好的消息。这是在 delete/insert/update 操作

之前检查一些约束的示例
class ExampleView(ModelView):
    def on_model_delete(self, model):
        #check constraint
            

    def on_model_change(self, form, model, is_created):
        #insert 
        if is_created:
            #check constraint
        #update
        else:
            #check constraint