Python 2.7 如何使前一天';s日期和今天';s日期只能在Odoo中的日期时间选择器中访问?

Python 2.7 如何使前一天';s日期和今天';s日期只能在Odoo中的日期时间选择器中访问?,python-2.7,datetime,odoo,odoo-8,openerp-8,Python 2.7,Datetime,Odoo,Odoo 8,Openerp 8,我试图检查一个条件,即今天的日期只能在Odoo中的日期时间选择器中选择,代码如下 def onchange_date(self, cr, uid, ids, fdate, context=None): if fdate: if datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").date() <> datetime.now().date(): return { 'value': { 'fdate': False } } return fdat

我试图检查一个条件,即今天的日期只能在Odoo中的日期时间选择器中选择,代码如下

def onchange_date(self, cr, uid, ids, fdate, context=None):
if fdate:
if datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").date() <> 
datetime.now().date():
return { 'value': { 'fdate': False } }
return fdate
def onchange\u日期(self、cr、uid、id、fdate、context=None):
如果fdate:
如果datetime.strtime(fdate,“%Y-%m-%d%H:%m:%S”).date()
datetime.now().date():
返回{'value':{'fdate':False}
返回fdate

我还想让用户可以选择前一天,即昨天的日期和今天的日期

selected\u date=datetime.strtime(fdate,“%Y-%m-%d%H:%m:%S”).date()
selected_date = datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").date()
yes_date = datetime.strptime(fdate, "%Y-%m-%d %H:%M:%S").relativedelta(days = -1).date()
today = datetime.now().date()
if selected_date <> today and selected_date <> yes_date
是\u date=datetime.strtime(fdate,“%Y-%m-%d%H:%m:%S”).relativedelta(days=-1).date() 今天=datetime.now().date() 如果选择了“今天日期”和“是日期”

并为相对delte添加导入文件

如果您只使用日期,则应使用
日期
而不是
日期时间
,如果首先如果您只希望用户使用今天的日期,则自动获取今天的日期并将其设置为
只读
,如下所示:

...
import time
...
#here you got a field with the date of today.
date_today = fields.Date('Today is: ', default = lambda *a: time.strftime("%Y-%m-%d"), readonly = True)
如果你想要一个用户只能选择昨天和今天的日子,那就有点费劲了,我知道这不是最好的方法,但效果很好

...
from openerp.exceptions import ValidationError
...

chosen_date = fields.Date('Chosen day: ', default = lambda *a: time.strftime("%Y-%m-%d"))

@api.onchange('chosen_date'):
def _onchange_chosen_date(self):
    yesterday = str( int(time.strftime("%d")) - 1 )
    if len(yesterday) == 1:
        yesterday = '0' + yesterday
    yesterday_date = time.strftime("%Y-%m-" + yesterday)
    if self.chosen_date != time.strftime("%Y-%m-%d") or self.chosen_date != yesterday_date:
        return { 'warning': {'title':"Warning", 'message':"You are only able to choose only yesterday and today...!"}}
编辑

我只使用V8,但我知道一些V7语法

第1条

二,

在XML中:

<field name="chosen_date" on_change="_onchange_chosen_date(chosen_date)" />


我希望这能对你有所帮助

所选日期=日期时间.strTime(fdate,“%Y-%m-%d%H:%m:%S”)。日期()类型错误:必须是字符串,而不是布尔。我收到这个错误,Vigneshwaran'module'对象没有属性'Date'名称'api'没有定义。这是我在胡安·萨尔塞多身上发现的几个错误。有什么想法吗?我想您使用的是Odoo v8,在这种情况下,您需要在openerp导入模型、字段、api的.py文件
顶部添加这一行,然后可以使用
日期
@api
,这是您的第二个错误,
module对象没有属性“manyOne”
您试图在OpenERP的V7语法中定义一个“manyOne”字段,您需要使用
manyOne
进行V8语法,请告诉我您的答案!胡安·萨尔塞多,是的,你完全正确,你介意告诉我如何在V7中实现你的代码吗?好的,非常感谢胡安·萨尔塞多,他将试用并让你知道……)AttributeError:'注册。访问者'对象没有属性'\u id'。你知道这个错误与胡安·萨尔塞多有关吗?
...
from openerp.osv import osv
...

chosen_date = fields.date('Chosen day: ', default = lambda *a: time.strftime("%Y-%m-%d"))

def _onchange_chosen_date(self, cr, uid, ids, chosen_date, context=None):
    yesterday = str( int(time.strftime("%d")) - 1 )
    if len(yesterday) == 1:
        yesterday = '0' + yesterday
    yesterday_date = time.strftime("%Y-%m-" + yesterday)
    if self.chosen_date != time.strftime("%Y-%m-%d") or self.chosen_date != yesterday_date:
        raise osv.except_osv(("Warning"),("You are only able to choose only yesterday and today...!"))
<field name="chosen_date" on_change="_onchange_chosen_date(chosen_date)" />