Python 我想用浮动值显示休假持续时间

Python 我想用浮动值显示休假持续时间,python,openerp,odoo-10,Python,Openerp,Odoo 10,我在hr\u leave\u rules.py中创建了“允许半天”字段 此外,我还继承了字段get\u number\u of_days,用于计算申请的休假天数,以及holiday\u status\u id用于指示休假类型。我想做的是,如果对于特定的假日\u状态\u id如果允许的半天为“是”,那么在获取天数中,它应该采用浮点值,否则将采用整数值。为此,我尝试了下面的代码,但它不工作。请帮助我 离开u type.py 来自odoo导入字段、模型、api、_ 从数学导入单元 从日期时间导入时间增

我在hr\u leave\u rules.py中创建了“允许半天”字段

此外,我还继承了字段get\u number\u of_days,用于计算申请的休假天数,以及holiday\u status\u id用于指示休假类型。我想做的是,如果对于特定的假日\u状态\u id如果允许的半天为“是”,那么在获取天数中,它应该采用浮点值,否则将采用整数值。为此,我尝试了下面的代码,但它不工作。请帮助我

离开u type.py

来自odoo导入字段、模型、api、_ 从数学导入单元 从日期时间导入时间增量 从openerp.exceptions导入UserError 每天小时=8 课堂假期(models.Model): _继承=“人力资源假期” @api.onchange('天数\温度') 定义假日状态id(自我): 当前=self.env['hr\u leave\u rules.leave\u rules']。搜索([( “假日状态(id)”,“=”,self.holiday(状态(id.id)]) @api.onchange('日期_自') 定义更改日期(自): date\u from=self.date\u from date\u to=self.date\u to 如果日期从而不是日期到: date_to_,_delta=字段。Datetime.from_字符串(date_from)+timedelta(小时数=每天小时数) self.date\u to=str(日期与增量) 当前=self.env['hr\u leave\u rules.leave\u rules']。搜索([( “假日状态(id)”,“=”,self.holiday(状态(id.id)]) 如果current.half_day_allowed==“是”: 如果(日期到和日期从)和(日期从从何处开始

首先,如果你有一个是/否的字段,它应该被定义为一个
布尔
字段,而不是
字符
字段。它将允许你做更简单的
如果
/
或者
逻辑,更不用说这是一个更好的实践了

if half_day_allowed:
    # Do this way
else:
    # Do that way
其次,如果你有重复的代码,你应该把它分解成自己的可读性方法

您已将整个部分重复了两次:

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, 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, date_to, self.employee_id.id))
    else:
        self.number_of_days_temp = 0
最后,为了确定没有获得预期结果的问题所在,我们需要您提供更多信息。到目前为止,您所说的是:

我尝试了下面的代码,但它不工作

在“是”和“否”两种情况下,它都没有显示正确的get_天数

这对确定问题没有帮助。是否有错误消息?它是否返回无效数据?如果是,输入和输出是什么,以及期望它应该是什么


在没有进一步了解的情况下,我只能猜测您的
天数\u temp
字段(您的问题中没有包含字段定义)定义为
整数
字段,在这种情况下,它将始终忽略小数。必须将其定义为
浮点
,才能使其工作。

您能更具体地说明问题吗?从您的代码中,我不确定什么不起作用。@sg.sysel我已编辑了我的问题。请重新检查一下。您发现了什么错误re getting?(例如,即使
current.half_day\u allowed==“yes”
),也不能获得半天,但只能获得全天)@sg.sysel yes,在两种情况下,即“yes”和“no”都不能显示正确的get_天数
if half_day_allowed:
    # Do this way
else:
    # Do that way
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, 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, date_to, self.employee_id.id))
    else:
        self.number_of_days_temp = 0
@api.multi
def 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)