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

时间:2015-05-04 08:21:52

标签: python flask flask-sqlalchemy flask-admin

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

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

在调试模式下保存违反约束的记录时,应用会停止并带有回溯功能。如果不在调试模式下,它会在flash消息中报告错误并回滚事务。

这是所需的行为(即闪存消息和回滚)。用户做错了什么并且不会输入错误的数据:它不是一个应该显示回溯的错误。

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

1 个答案:

答案 0 :(得分:1)

您可以实现on_model_change和on_model_delete函数。因此,您可以检查数据是否唯一,并在不满足约束的情况下提供更加用户友好的消息。以下是在删除/插入/更新操作之前检查某些约束的示例

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