odoo 創建一條記錄的時候自動增加一個序列號
阿新 • • 發佈:2017-07-02
fault number where 實現 更新 字段 echo param only
第一步:
在odoo開發者模式,進入配置設置添加一個序列號,sequence ocde 這個地方的值要與代碼裏相同
開始是在代碼裏這樣設置的,cwbh是財務編號的字段需求是每次新增自動加1
cwbh = fields.Char(string=‘Number‘, required=True, copy=False, readyonly= True default=lambda self:self.env[‘ir.sequence‘].next_by_code(‘dycrm.cwbh‘))
重新啟動代碼可以執行但是有個bug就是啟動的時候他會增加一次,保存的時候會增加一次。後來經過思遠老師的指點發現,把readyonly= False 就好了。但是不能讓用戶修改滿足不了需求,於是想在創建代碼的時候自動增加sequence序列
# def create(self, vals):
# if not vals.get(‘cwbh‘):
# vals[‘cwbh‘] = self.env[‘ir.sequence‘].next_by_code(‘dycrm.cwbh‘)
# return super(dycrm, self).create(vals)
但是在保存的時候就會報一個錯誤,可能是因為我沒有繼承造成的,但是源碼裏也沒有繼承還是能夠實現
最後新建了一個自啟動aciton,創建一條記錄的時候觸發python代碼
param = (env[‘ir.sequence‘].next_by_code(‘dycrm.cwbh‘),record.id) #保存的時候根據record.id當前記錄的id值,更新表的cwbh字段 env.cr.execute("update dycrm_main set cwbh=%s where id=%s"% param)
在odoo 開發模式auto aciton 保存條件的時候,是先保存後觸發條件,所以可以直接根據新生產的記錄id更新這條記錄裏的某個字段
env[‘ir.sequence‘].next_by_code(‘dycrm.cwbh‘)會自動生成一個序列根據第一步裏的設置,在設置菜單裏,要去掉self。
好了就這麽多,有用方便的話,歡迎支付寶打賞哦。
本文為原創轉載請註明。另推薦思遠老師的odoo學習網站
odoo 創建一條記錄的時候自動增加一個序列號