在OpenERP中设置默认日期

在OpenERP中设置默认日期,openerp,Openerp,我正在为OpenERP7创建一个模块,在创建新合作伙伴时将今天的日期设置为默认值。我已经安装了该模块,重新启动了Openerp服务,默认设置一点也没有改变。(我为网站字段添加了一个“goofball”字段和伪造的默认数据,以确保它不是python lambda代码问题。它不是…)下面是我在partner.py中的代码: from osv import osv, fields import datetime class res_partner(osv.osv): _inherit = '

我正在为OpenERP7创建一个模块,在创建新合作伙伴时将今天的日期设置为默认值。我已经安装了该模块,重新启动了Openerp服务,默认设置一点也没有改变。(我为网站字段添加了一个“goofball”字段和伪造的默认数据,以确保它不是python lambda代码问题。它不是…)下面是我在partner.py中的代码:

from osv import osv, fields
import datetime

class res_partner(osv.osv):
    _inherit = 'res.partner'

    _columns = {"goofball":fields.char('goofball', size=15)}

    _defaults = {
        'website': 'www.veppsight.com',
        'date': lambda *a: datetime.date.today().strftime('%Y-%m-%d'),
    }
网站和日期字段没有输入默认数据,我在psql中验证的数据库中也没有创建“goofball”字段。我做错了什么

使用以下代码:

from osv import osv, fields
import time

class res_partner(osv.osv):
    _inherit = 'res.partner'

    _columns = {"goofball":fields.char('goofball', size=15)}

    _defaults = {
        'website': 'www.veppsight.com',
        'date1': time.strftime('%Y-%m-%d'),
    }
如果可能,将字段名
DATE
重命名为其他名称。在POSTGRESQL中,AS DATE是DT


谢谢

导入时间和默认设置

_defaults = {
    'website': 'www.veppsight.com',
    'date': lambda *a: time.strftime('%Y-%m-%d'),
}
这个怎么样:

from osv import osv, fields import time class res_partner(osv.osv): _inherit = 'res.partner' _columns = {"goofball": fields.char('goofball', size=15)} _defaults = { 'website': 'www.veppsight.com', 'date1': lambda *a: time.strftime('%Y-%m-%d'), } res_partner() 从osv导入osv,字段 导入时间 班级资源合作伙伴(osv.osv): _继承='res.partner' _columns={“goofball”:fields.char('goofball',size=15)} _默认值={ “网站”:“www.veppsight.com”, “date1”:lambda*a:time.strftime(“%Y-%m-%d”), } res_partner()
自V6.1以来,有一个新函数用于处理今天的日期,称为context_today

你可以在下面的链接中查看这方面的背景。。。

基于此,您可以使用

_ defaults = { 
'date1': fields.date.context_today, 
}
问候,, -马里奥


Lambda在python中是一个内嵌或匿名函数。

您更新了模块吗?firebug,谢谢您的回复。我希望我能说它现在起作用了,但行为和以前一样。我会继续研究。。。任何其他的评论都是非常受欢迎的。好吧,我错了。我忘了在init.py文件中导入partner!但是您建议使用时间。strftime(“%Y-%m-%d”)也有效,因此我接受您的回答,firebug。您确定此解决方案不会使默认值等于服务器启动的日期,并且此代码首次计算的日期吗?我打赌如果你明天测试它,默认值将是今天。@PhilFrost::O这就是为什么它被称为今天!!我猜。@firebug:好吧,问题不在于今天的
),而是这里的
时间.strftime
是在导入模块时计算的,而不是在创建新对象时计算的。它也可以是“日期1”:“2013-01-03”。我猜,但我打赌这就是为什么这些解决方案中有
lambda*a:…
;这将生成一个匿名函数,其内容在调用函数时计算,而不是在导入模块时计算。感谢您的帮助,Phil。我是通过直接查询数据库来验证字段的,而不是查看我只打算测试的虚假定义。此外,该类确实需要实例化,这在最初的文章中没有出现。这是我的错误。谢谢你提到它,不过对其他读者来说。@Phil如果你想讨论这个问题,请开始新的线程,不要在这里混合所有内容。那么如何将日期-1作为默认值。?我们可以使用fields.date.context\u today-1吗?或者另一种轻松的方式为天扣款怎么办。?语法:“出生日期”:lambda*a:(datetime.today()+timedelta(days=(5)).strftime(“%Y-%m-%d”),
_defaults = {
        'date': lambda self,cr,uid,context={}: context.get('date', fields.date.context_today(self,cr,uid,context=context)),
'date': lambda self, cr, uid, context={}: context.get('date', time.strftime("%Y-%m-%d %H:%M:%S")),
'date' : fields.date.context_today,
 }