Model中设置默认值时 ,使用 lambda 与否的差别
-
长沙-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
固定;启动时;按日期 -
[quote author=Joshua link=topic=7319.msg16733#msg16733 date=1372043171]
6.1后,官方建议date/datetime的默认值的写法是:<br />'birthdate': fields.date.context_today, <br />'create_at': fields.datetime.now,<br />
[/quote]
对,否则,用以上讨论中的写法就会有时区计算的问题 -
我们来看看 time.strftime('%Y-%m-%d') 和 lambda *a: time.strftime('%Y-%m-%d'), 的区别
<br />In [3]: type(time.strftime('%Y-%m-%d'))<br />Out[3]: str<br /><br />In [4]: type( lambda *a: time.strftime('%Y-%m-%d'))<br />Out[4]: function<br /><br />
其实一个已经解析为str一个还是函数。