将天数添加到日期时间

Adding days to datetime

我不想添加到计划日期整数。它总是从 1 到 10,但我的代码有问题。

planned_date = fields.Date(string='Planned Date', required=False,
                           default=fields.Date.today)
def linedate(self):    
    if line.discount > 5:
       
        daysz = line.product_id.seller_ids[0].delay # it's integer from 1 to 10 always
   
        planned = (line.planned_date + timedelta(days=daysz) ).strftime('%Y-%m-%d')
        line.planned_date =  planned
        print line.planned_date

我遇到了这种错误

planned = (line.planned_date + timedelta(days=daysz) ).strftime('%Y-%m-%d')

TypeError: coercing to Unicode: need string or buffer, datetime.timedelta found

line.planned_date 是一个 Unicode 字符串对象。您需要将其转换为日期时间对象,然后使用 timedelta 添加。

例如:

import datetime
planned = (datetime.datetime.strptime(line.planned_date, '%Y-%m-%d') + datetime.timedelta(days=daysz) ).strftime('%Y-%m-%d')

安装dateutil (pip install python-dateutil)然后你就可以很容易的解析line.planned_date到datetime对象

from dateutil import parser
planned = (parser.parse(line.planned_date) + timedelta(days=daysz) ).strftime('%Y-%m-%d')

你需要转换 planned_date 因为 Odoo 将日期存储为字符串,最好使用 Date 方法从字符串转换为 Date 对象,你可以参考 Odoo fields.

static from_string(value): Convert an ORM value into a date value.

static to_string(value): Convert a date value into the format expected by the ORM.

    def linedate(self):
    if line.discount > 5:
        daysz = line.product_id.seller_ids[0].delay  # it's integer from 1 to 10 always

        planned = fields.Date.from_string(line.planned_date) + timedelta(days=daysz)
        line.planned_date = fields.Date.to_string(planned)
        print line.planned_date