python – 我想以浮点值显示休假持续时间

python – 我想以浮点值显示休假持续时间,第1张

概述我在hr_leave_rules.py中创建了half_day_allowed字段 from odoo import models, fields, api, _class HRLeaveRules(models.Model): _name = 'hr_leave_rules.leave_rules' half_day_allowed = fields.Selection([ 我在hr_leave_rules.py中创建了half_day_allowed字段

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 – 我想以浮点值显示休假持续时间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存