我不会添加到计划的日期整数。它总是从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:强制转换为Unicode:需要字符串或缓冲区,找到datetime.timedelta
答案 0 :(得分:2)
line.planned_date
是Unicode字符串对象。您需要将其转换为datetime对象,然后使用timedelta添加。
例如:
import datetime
planned = (datetime.datetime.strptime(line.planned_date, '%Y-%m-%d') + datetime.timedelta(days=daysz) ).strftime('%Y-%m-%d')
答案 1 :(得分:2)
您需要转换planned_date
,因为Odoo将日期存储为字符串,最好使用Date方法从字符串转换为Date对象,您可以参考Odoo fields。
static from_string(value):将ORM值转换为日期值。
静态to_string(值):将日期值转换为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
答案 2 :(得分:1)
安装dateutil
(pip install python-dateutil
),然后可以轻松地将line.planned_date
解析为日期时间对象
from dateutil import parser
planned = (parser.parse(line.planned_date) + timedelta(days=daysz) ).strftime('%Y-%m-%d')