2015-05-04 38 views
1

我們使用http://flask-admin.readthedocs.org/作爲快速管理界面。 我們的模型定義的約束如下:如何在`flask-admin`中執行約束?

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

當保存操作違反了約束,而在調試模式,應用程序與回溯停止記錄。如果不在調試模式下,它會在閃存消息中報告錯誤並回退事務。

這是所需的行爲(即Flash消息和回滾)。用戶做了錯誤的事情,並防止輸入錯誤的數據:這不是一個應該顯示回溯的錯誤。

優雅地處理這種異常的正確方法是什麼?我是否應該重寫ModelView{create,update,delete}_model方法?

+0

我不能得到的UniqueConstraint工作之前檢查一些約束的例子,可以請你分享的語法,如果可能的話,TIA。也引發http://stackoverflow.com/questions/30779466/flask-admin-unique-constraint-on-multiple-columns-is-not-working – user2390183

回答

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