一:onchange機制【onchange=前端js函數!能夠實現前端實時更新以及修改驗證】前端
onchange機制:不須要保存數據到數據庫就能夠實時更新用戶界面上的顯示。python
@api.onchange('監聽的字段', '監聽的字段'。。。) def _onchange_受影響的字段(self): # set auto-changing field self.受影響的字段 = 根據監聽字段計算出受影響字段的值
也能夠監控某字段值的變化,若是異常則報錯:sql
@api.onchange('監聽的字段') def _verify_監聽字段(self): if 監聽字段值異常: return { 'warning': { 'title': "異常類型", 'message': "具體異常信息", }, }
二:模型字段約束數據庫
python約束:使用裝飾器,@api.constrains('約束字段')api
Python約束經過方法裝飾器constraints()
來定義,並在記錄集上調用這個方法。函數
裝飾器參數指定了約束涉及的字段,當涉及的字段中任一發生改變時觸發方法執行。若是不知足約束條件,該方法將引起異常。post
@api.constrains('約束字段') def _check_something(self): for record in self: if record.約束字段 op 值: raise ValidationError("異常信息")
sql約束:使用_sql_constraints屬性。學習
屬性值是一個列表,每個列表元素有三個內容:(name, sql_definition, message):spa
name是約束字段名
sql_definition是一個postgresql語句,檢查該字段值
message是校驗失敗時返回的錯誤消息
_sql_constraints = [ ('name', 'CHECK(name op 值)', "異常信息"), ('name', 'sql語句', "異常信息"), ]