转载请注明原文地址: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

最新文章

  1. memcached
  2. Android网络操作的几种方法
  3. Excel For Java
  4. 初始Spring
  5. Physicals
  6. iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile
  7. BZOJ 1054 [HAOI2008]移动玩具
  8. [Mugeda HTML5技术教程之4] Studio 概述
  9. SNS团队第二次站立会议(2017.04.23)
  10. Omi 拥抱 60FPS 的 Web 动画
  11. JAVA图书管理系统汇总共27个
  12. 发送HTTPS请求
  13. mysql数据表的字段操作
  14. using 的三种使用方式
  15. Raw Socket(原始套接字)实现Sniffer(嗅探)
  16. 报错:TargetException, 非静态方法需要一个目标
  17. Netty4.0学习笔记系列之二:Handler的执行顺序
  18. ActiveMQ集群方案
  19. [转载]latex插入两栏的图形或表格
  20. SZU1

热门文章

  1. [javaEE] 控制浏览器缓存资源
  2. 7、包装类、System、Math、Arrays、大数据运算
  3. 安装和使用phpstorm
  4. JavaScript - 收藏集 - 掘金
  5. C/C++标准有哪些?
  6. Android深入四大组件(六)Service的启动过程
  7. python 网络 socket
  8. php foreach 报 “Cannot create references to elements of a temporary array expression”
  9. python学习笔记之open函数的用法
  10. java笔记--匿名内部类和静态内部类的理解和使用