在Odoo 10中添加几个月的日期时间

时间:2017-02-27 09:19:18

标签: python openerp odoo-10

我想创建一个模块可以这样做: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)

XML

我根据互联网上的来源和解释编写代码,但它不起作用并导致错误: enter image description here

我从这些链接中读取了代码和方向

https://docs.python.org/2/library/datetime.html https://github.com/odoo/odoo/blob/10.0/odoo/fields.py#L1504

1 个答案:

答案 0 :(得分:0)

要在date / datetime对象上添加/删除数月,我建议使用python包:dateutil.relativedeltahttp://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)

您的问题引用了datetimedate个对象,因此包含了两个示例。

希望这有帮助。