1. 程式人生 > >Odoo中的逆計算——由compute字段的值逆向修改其依賴值

Odoo中的逆計算——由compute字段的值逆向修改其依賴值

duration entry str blank targe 就是 獲取 second 時間

轉載請註明原文地址:https://www.cnblogs.com/cnodoo/p/9281406.html

當通過compute屬性指定方法,根據依賴值計算得到當前字段值時。一般也要制定這個計算的逆運算——根據當前字段值,改變依賴值。

比如:開始日期+持續時間=結束日期,我們有這個可以得到結束日期。

如果用戶指定了開始日期和結束日期,那麽持續時間=結束日期-開始日期,實現這個邏輯的方法就是inverse屬性值指向的方法。

   #定義結束日期字段,結束日期由開始+持續,而設置結束日期,則需要自行計算出持續日期
    end_date = fields.Date(string="End Date", store=True,
                           compute=‘_get_end_date‘, inverse=‘_set_end_date‘)
    #"獲取結束日期"事件的響應函數:計算出結束日期
    @api.depends(‘start_date‘, ‘duration‘)
    def _get_end_date(self):
        for r in self:
            if not (r.start_date and r.duration):
                r.end_date = r.start_date
                continue
            start = fields.Datetime.from_string(r.start_date)
            duration = timedelta(days=r.duration, seconds=-1)
            r.end_date = start + duration

    #"設置結束日期"事件的響應函數:計算並設置持續時間
    def _set_end_date(self):
        for r in self:
            if not (r.start_date and r.end_date):
                continue
            start_date = fields.Datetime.from_string(r.start_date)
            end_date = fields.Datetime.from_string(r.end_date)
            r.duration = (end_date - start_date).days + 1

Odoo中的逆計算——由compute字段的值逆向修改其依賴值