我在payslip屏幕上创建了一个名为caldays的自定义字段,在此字段中,我希望在openerp中使用onchange函数获取from_date
和to_date
之间的天数,请帮我处理代码
我得到了以下代码,但我怎么能把它onchange function
datej = str(payslip.date_to)
datek = str(payslip.date_from)
dj = datej[-2:]
x=0
new = 0
while (x<=31):
x= x+1
if str(x) == dj or "0"+str(x) == dj:
new= x
dk = datek[-2:]
y=0
old = 0
while (y<=31):
y= y+1
if str(y) == dk or "0"+str(y) == dk:
old= y
caldays = new-old + 1
result = caldays
答案 0 :(得分:1)
试试这个,这样就不会。有几天,你必须给出两个论点,即 date_from和date_to。不要忘记导入(导入日期时间和导入数学) 你可以将你的字段放在xml,
中<field name="date_from" on_change="get_number_of_days(date_from,date_to)"/>
<field name="date_to" on_change="get_number_of_days(date_from,date_to)"/>
<field name="number_of_days_temp"/>
和你的py文件,
def get_number_of_days(self, date_from, date_to):
"""Returns a float equals to the timedelta between two dates given as string."""
if (date_to and date_from) and (date_from <= date_to):
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT)
to_dt = datetime.datetime.strptime(date_to, DATETIME_FORMAT)
timedelta = to_dt - from_dt
diff_day = timedelta.days + float(timedelta.seconds) / 86400
result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1
else:
result['value']['number_of_days_temp'] = 0
return result
希望这会对你有所帮助。