Siirry sisältöön
Menu
Sinun on rekisteröidyttävä, jotta voit olla vuorovaikutuksessa yhteisön kanssa.
Tämä kysymys on merkitty
2 Vastaukset
17576 Näkymät

Hi,


I have a model with a date field as follow :


class myModel(osv.osv)

    date_start : fields.date(...)

    month_nb = fields.integer(...)

    date_end = fields.date(...)


I made an onchange method to calculate the date_end field on when month_nb and date_start change :

@api.onchange('date_start','month_nb')

def _compute_date_end(self):

      from datetime import date

      from dateutil.relativedelta import relativedelta

      self.date_end = self.date_start + relativedelta(months=self.month_nb)


But with this code, I get an error :

self.date_end = self.date_start + relativedelta(months=self.month_nb)

File "/usr/lib/python2.7/dist-packages/dateutil/relativedelta.py", line 247, in __radd__

raise TypeError, "unsupported type for add operation"

TypeError: unsupported type for add operation


I don't understant what I am doing wrong in my code. Do you see something wrong in my code ?

Thank you for your help

Avatar
Hylkää
Tekijä Paras vastaus

I eventually found the solution with the old api way :


    from datetime import datetime

    from dateutil.relativedelta import relativedelta

    if self.date_start:

        self.date_end = (datetime.strptime(self.date_start,'%Y-%m-%d') + relativedelta(months=self.duree_mois)).strftime('%Y-%m-%d')

Avatar
Hylkää
Paras vastaus

1. if you use the new api @api.onchange, you create model definition in new api standard, see documentation

class myModel(models.Model)

date_start : fields.Date(...)

month_nb = fields.Integer(...)

date_end = fields.Date(...)


2. You use helpers for date conversion

date_start_dt = fields.Datetime.from_string(self.date_start)

dt = date_start_dt + relativedelta(months=self.month_nb)

self.date_end = fields.Datetime.to_string(dt)

Avatar
Hylkää
Aiheeseen liittyviä artikkeleita Vastaukset Näkymät Toimenpide
1
tammik. 23
2090
1
tammik. 22
3205
2
tammik. 19
6431
2
heinäk. 18
6393
0
elok. 17
4479