我想创建一个模块可以这样做:inputdate =“2017年2月27日”,nomonths = 2,所以outputdate必须是“2017年4月27日”。 inputdate和nomonths是我们必须填写的2个字段,而ouputdate只是odoo中的“只读”字段。
class DateGenerate(models.Model):
_name = "studentmanagement.dategenerate"
inputdate = fields.Date()
nomonths = fields.Integer(required=True)
outputdate = fields.Date(readonly=True)
@api.onchange('inputdate','nomonths')
def add_month(self):
for record in self:
dt = fields.Datetime.to_string(record.inputdate)
inpYear = datetime.strptime(dt,"%Y")
inpMonth = datetime.strptime(dt,"%m")
inpDay = datetime.strptime(dt,"%d")
outYear = inpYear + int((inpMonth + record.nomonths - 1)/12)
outMonth = (inpMonth + record.nomonths - 1) % 12 + 1
record.outputdate = datetime.date(outMonth, inpDay, outYear)
我根据互联网上的来源和解释编写代码,但它不起作用并导致错误:
我从这些链接中读取了代码和方向
https://docs.python.org/2/library/datetime.html https://github.com/odoo/odoo/blob/10.0/odoo/fields.py#L1504
答案 0 :(得分:0)
要在date / datetime对象上添加/删除数月,我建议使用python包:dateutil.relativedelta
。 http://dateutil.readthedocs.io/en/stable/relativedelta.html
基本用法:
from datetime import date, datetime
from dateutil.relativedelta import relativedelta
print date.today() + relativedelta(months=+3)
print datetime.today() + relativedelta(months=+3)
print date.today() - relativedelta(months=+3)
print datetime.today() - relativedelta(months=+3)
您的问题引用了datetime
和date
个对象,因此包含了两个示例。
希望这有帮助。