1. 程式人生 > >odoo 創建一條記錄的時候自動增加一個序列號

odoo 創建一條記錄的時候自動增加一個序列號

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 創建一條記錄的時候自動增加一個序列號