跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. Model中设置默认值时 ,使用 lambda 与否的差别

Model中设置默认值时 ,使用 lambda 与否的差别

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
6 帖子 4 发布者 5.7k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    ccdos
    写于 最后由 编辑
    #1

    长沙-figol(346732707)  9:57:06
    总监,给字段设置默认值时,为什么要用lambda *a


    重庆-mrshelly(49812643)  10:01:27
    好吧.
    'date': '2013-01-01';
    就会一直是 2013-01-01
    长沙-figol(346732707)  10:01:55
    嗯
    重庆-mrshelly(49812643)  10:02:06
    然后 还有一种写法

    'date': time.strftime('%Y-%m-%d'),
    然后 还有一种
    'date': lambda *a: time.strftime('%Y-%m-%d'),
    三种写法. 理论上, 第一,二种是一样的.
    长沙-figol(346732707)  10:02:43
    en
    南京-ccdos(1431494)  10:03:00
    用了lambda  , 每次都会计算
    重庆-mrshelly(49812643)  10:03:05
    举个例. 当你 2013-01-01 启动服务器进程后,

    你进单据, 默认值是 2013-01-01
    当你第二天进时,  还是2013-01-02
    还是2013-01-01
    如果你2013-01-14 重启服务器.
    第一种 还是2013-01-01
    第二种 是2013-01-14
    重庆-mrshelly(49812643)  10:04:11
    第三种是2013-01-14
    南京-windy(359063962)  10:04:14
    jeff 失踪了?
    长沙-figol(346732707)  10:04:26
    哦。。基本上明白了。
    谢谢 总监指导
    广东-AllanWong(18895563)  10:04:37
    搞大project去了吧
    重庆-mrshelly(49812643)  10:04:43
    2013-01-15 看时, 第一种是 2013-01-01  第二种是 2013-01-14  第三种是 2013-01-15



    南京-海飞(330472962)  10:07:20
    固定;启动时;按日期

    1 条回复 最后回复
    0
    • JoshuaJ 离线
      JoshuaJ 离线
      Joshua 管理员
      写于 最后由 编辑
      #2

      6.1后,官方建议date/datetime的默认值的写法是:

       <br />&#039;birthdate&#039;: fields.date.context_today, <br />&#039;create_at&#039;: fields.datetime.now,<br />
      

      【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

      1 条回复 最后回复
      0
      • digitalsatoriD 离线
        digitalsatoriD 离线
        digitalsatori 管理员
        写于 最后由 编辑
        #3

        [quote author=Joshua link=topic=7319.msg16733#msg16733 date=1372043171]
        6.1后,官方建议date/datetime的默认值的写法是:

         <br />&#039;birthdate&#039;: fields.date.context_today, <br />&#039;create_at&#039;: fields.datetime.now,<br />
        


        [/quote]

        对,否则,用以上讨论中的写法就会有时区计算的问题

        【上海先安科技】(tony AT openerp.cn)

        1 条回复 最后回复
        0
        • JoshuaJ 离线
          JoshuaJ 离线
          Joshua 管理员
          写于 最后由 编辑
          #4

          我们来看看 time.strftime('%Y-%m-%d')  和 lambda *a: time.strftime('%Y-%m-%d'), 的区别

          <br />In [3]: type(time.strftime(&#039;%Y-%m-%d&#039;))<br />Out[3]: str<br /><br />In [4]: type( lambda *a: time.strftime(&#039;%Y-%m-%d&#039;))<br />Out[4]: function<br /><br />
          



          其实一个已经解析为str一个还是函数。

          【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

          1 条回复 最后回复
          0
          • G 离线
            G 离线
            ghosthand
            写于 最后由 编辑
            #5

            没有用lambda的时候 在修改服务器时间后,如果不重新启动服务的话 在创建纪录的时候,如果在_defaults中有设置默认值,则默认的时间还是修改前的时间。而是用lambda的话,则时间会跟着系统的时间变化,实时更新的

            1 条回复 最后回复
            0

            • 登录

            • 没有帐号? 注册

            • 登录或注册以进行搜索。
            • 第一个帖子
              最后一个帖子
            0
            • 版块
            • 标签
            • 热门
            • 用户
            • 群组