1.檢查業務邏輯中的錯誤,終止代碼執行,顯示錯誤或警告信息:html
raise osv.except_osv(_('Error!'), _('Error Message.'))
示例代碼:api
#刪除當前銷售單,須要驗證銷售單的狀態 def unlink(self, cr, uid, ids, context=None): for rec in self.browse(cr, uid, ids, context=context): if rec.state not in ['draft']: raise osv.except_osv(_(u'警告!'),_(u'您不能刪除如下狀態的銷售單 %s .')%(rec.state)) if rec.create_uid.id != uid: raise osv.except_osv(_(u'警告!'),_(u'您不能刪除他人建立的單據.')) return super(sale, self).unlink(cr, uid, ids, context)
2.字段的 onchange 事件中返回值,同時返回提示信息:post
warning = { 'title': _('Warning!'), 'message' : _('Warning Message.') } return {'warning': warning, 'value': value}
示例代碼:ui
@api.onchange('partner_id') def onchange_partner_id_warning(self): if not self.partner_id: return warning = {} title = False message = False partner = self.partner_id # If partner has no warning, check its company if partner.sale_warn == 'no-message' and partner.parent_id: partner = partner.parent_id if partner.sale_warn != 'no-message': # Block if partner only has warning but parent company is blocked if partner.sale_warn != 'block' and partner.parent_id and partner.parent_id.sale_warn == 'block': partner = partner.parent_id title = ("Warning for %s") % partner.name message = partner.sale_warn_msg warning = { 'title': title, 'message': message, } if partner.sale_warn == 'block': self.update({'partner_id': False, 'partner_invoice_id': False, 'partner_shipping_id': False, 'pricelist_id': False}) return {'warning': warning} if warning: return {'warning': warning}
3.視圖中 button 按鈕點擊時顯示確認信息:【直接加上"confirm"屬性,就能夠實現,點擊按鈕的時候,彈出窗口,提示「是否確認操做」的提示框】this
<button name="cancel_voucher" string="Cancel Voucher" type="object" states="posted" confirm="Are you sure you want to unreconcile this record?"/>
有興趣的小夥伴能夠研究下,odoo的幾種拋出異常的方式的區別:spa
from odoo.exceptions import except_orm, Warning, RedirectWarning,AccessDenied
AccessDenied RedirectWarning MissingError except_orm AccessError DeferredException ValidationError Warning
相關參考:code
http://www.cnblogs.com/cnshen/p/3205405.htmlorm