2017-02-27 186 views
0

我想創建一個模塊,可以這樣做:inputdate =「2017年2月27日」,nomonths = 2,因此outputdate必須爲「2017年4月27日」。 inputdate和nomonths是我們必須填寫的兩個字段,並且odoudate只是odoo中的一個「只讀」字段。在Odoo 10中添加幾個月到日期時間

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

回答

0

要添加/將日期添加到日期/日期時間對象我建議使用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對象,因此已包括了兩個例子。

希望這會有所幫助。

+0

我們可以做到這一點: 「record.outputdate = record.inputdate + relativedelta(months = + record.nomonths)」。記錄是odoo數據庫自身的一行,但它會導致錯誤:「File」dateutil \ relativedelta.pyc「,第247行,在__radd__中 TypeError:不支持的類型用於添加操作」 –

+0

是您的record.inputdate python日期或日期時間對象?並且是你的記錄.nomonths是一個整數? –

+0

nomonths是一個整數,但record.inputdate是ODOO中的一個日期對象,而不是python。所以我想這是錯誤,但我不知道如何在odoo中添加/獲取日期。 –