from odoo import models,fIElds,API,_class HRLeaveRules(models.Model): _name = 'hr_leave_rules.leave_rules' half_day_allowed = fIElds.Selection([ ('yes',"Yes"),('no',"No")],string="Half Day Allowed",required=True)
而且,我继承了get_number_of_days字段,它们计算的休假时间是多少天,而holIDay_status_ID则表示休假类型.我想要做的是,如果对于特定的holIDay_status_ID,如果half_day_allowed为’yes’,则在get_number_of_days中它应该采用浮点值,否则它将采用整数值.为此,我尝试了下面的代码,但它没有工作.plz帮帮我.
leave_type.py
from odoo import fIElds,models,_from math import ceilfrom datetime import timedeltafrom openerp.exceptions import UserErrorHOURS_PER_DAY = 8class leave(models.Model): _inherit = "hr.holIDays" @API.onchange('number_of_days_temp') def _holIDay_status_ID(self): current = self.env['hr_leave_rules.leave_rules'].search([( 'holIDay_status_ID','=',self.holIDay_status_ID.ID)]) @API.onchange('date_from') def _onchange_date_from(self): date_from = self.date_from date_to = self.date_to if date_from and not date_to: date_to_with_delta = fIElds.Datetime.from_string(date_from) + timedelta(hours=HOURS_PER_DAY) self.date_to = str(date_to_with_delta) current = self.env['hr_leave_rules.leave_rules'].search([( 'holIDay_status_ID',self.holIDay_status_ID.ID)]) if current.half_day_allowed == 'yes': if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = self._get_number_of_days( date_from,date_to,self.employee_ID.ID) else: self.number_of_days_temp = 0 else: if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = ceil(self._get_number_of_days( date_from,self.employee_ID.ID)) else: self.number_of_days_temp = 0 @API.onchange('date_to') def _onchange_date_to(self): date_from = self.date_from date_to = self.date_to current = self.env['hr_leave_rules.leave_rules'].search([( 'holIDay_status_ID',self.holIDay_status_ID.ID)]) if current.half_day_allowed == 'yes': if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = self._get_number_of_days( date_from,self.employee_ID.ID) else: self.number_of_days_temp = 0 else: if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = ceil(self._get_number_of_days( date_from,self.employee_ID.ID)) else: self.number_of_days_temp = 0解决方法 从哪里开始……
首先,如果您有一个Yes / No的字段,则应将其定义为布尔字段,而不是Char字段. Fields Documentation.它将允许你做更简单的if / else逻辑,更不用说它只是一个更好的做法.
if half_day_allowed: # Do this wayelse: # Do that way
其次,如果你有重复的代码,你应该将它分解为自己的方法以便于阅读. Don’t repeat yourself.
你重复了整整一节两次:
if half_day_allowed == 'yes': if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = self._get_number_of_days( date_from,self.employee_ID.ID) else: self.number_of_days_temp = 0else: if (date_to and date_from) and (date_from <= date_to): self.number_of_days_temp = ceil(self._get_number_of_days( date_from,self.employee_ID.ID)) else: self.number_of_days_temp = 0
相反,只需创建一个新方法并在需要时调用它.
@API.multidef get_number_of_days_temp(self,half_day_allowed=False): self.ensure_one() if half_day_allowed == 'yes': # Do this else: # Do that@API.onchange('date_from')def _onchange_date_from(self): ... self.number_of_days_temp = self.get_number_of_days_temp(current.half_day_allowed)@API.onchange('date_to')def _onchange_date_to(self): ... self.number_of_days_temp = self.get_number_of_days_temp(current.half_day_allowed)
最后,为了确定未获得预期结果的问题,我们需要您提供更多信息.你到目前为止所说的只是:
I trIEd the below code but it is not working.
Its not showing correct get_number_of_days in both the cases i.e.,in ‘yes’ and ‘no’
这对确定问题没有帮助.有错误信息吗?它是否返回无效数据?如果是这样,那么输入和输出是什么以及期望它应该是什么?
在不知道任何进一步的情况下,我唯一可以猜测的是你的number_of_days_temp字段(你没有在你的问题中包含字段定义)被定义为一个整数字段,在这种情况下它总是会忽略小数.必须将它定义为float才能使其工作.
总结以上是内存溢出为你收集整理的python – 我想以浮点值显示休假持续时间全部内容,希望文章能够帮你解决python – 我想以浮点值显示休假持续时间所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)