首页 > 解决方案 > 根据给定日期获取日期名称

问题描述

我想根据从字段中选择的日期获取日期名称。我有如下代码:

from datetime import datetime, date
from odoo import api, fields, models, _
from odoo.exceptions import ValidationError
import calendar

class HrPublicHolidayHolidays(models.Model):
    _name = 'hr.public.holiday.holidays'
    _description = 'Public Holidays Dates'

    name = fields.Char('Holiday Name', required=True)
    date = fields.Date('Holiday Date', required=True)
    date_day = fields.Char('Day')
    year_id = fields.Many2one('hr.public.holiday', 'Calendar Year', required=True)
    variable = fields.Boolean('Date may change')

    @api.onchange('date')
    def _get_day_of_date(self):
        for r in self:
            selected = fields.Datetime.from_string(r.date)
            r.date_day = calendar.day_name[selected.weekday()]

然后当我运行代码时,当我点击添加项目时在此处输入图像描述

单击按钮后,它向我显示错误结果:在此处输入图像描述

但是,如果我尝试选择日期,它将显示我选择的日期,如:在此处输入图像描述

所以基本上代码会运行,但错误只是不断显示,我不知道为什么。

标签: pythonpython-3.xodooodoo-11

解决方案


首先,默认获取当前日期,例如:

date = fields.Date(string='Date', default=fields.Date.context_today, required=True)

之后编写下面的函数来获取当天的名称

@api.multi
@api.depends('date')
def _get_day(self):
    self.day = self.date and (datetime.strptime(self.date, '%Y-%m-%d').date()).strftime('%A') or ''

推荐阅读