有时候我们需要获得当前的日期,并默认赋值给日期字段。我在使用odoo自带的fields.date.today()时出现了一个问题:
我的一个日期字段属性不能实现获取当天的时间,它现在默认获取的程序运行当天的时间,而不是目前的实际时间,感觉很奇怪。
因为不太清楚fields.date.today()的底层实现逻辑没办法解决问题,因此我换了一种实现方式。自己重写了一个获取时间函数,通过Java代码去获取时间然后赋值给字段,实验后功能正常。
import datetime
# 获取当天时间
@api.model
def _get_now_date(self):
date_now = datetime.date.today()
return date_now
日期字段赋值
date = fields.Date(string='日期', default=_get_now_date)
时间比较
# 时间比较
def time_compare(self, record_time):
# 获取当前时间(<class 'datetime.datetime'>)
now_time = datetime.date.today()
diff_time = record_time - now_time
# diff_time.days自动将timedelta转为int类型,time.seconds:秒差
day = diff_time.days
if (day > 2) | (day < -1):
raise odoo.exceptions.Warning('检查计划日期是否正确!')
# strftime转换为字符串
# now_time_str = datetime.datetime.now().strftime('%y-%m-%d')
# record_time_str = time_str.strftime('%y-%m-%d')
# mktime参数为struc_time,将日期转化为秒
# e_time = time.mktime(time.strftime(now_time_str, '%y-%m-%d'))
xml搜索视图:domian时间字段筛选(筛选时间在今天的字段记录)
<filter string="当天工作计划" name="create_date"
domain="[('date','>=', time.strftime('%Y-%m-%d 00:00:00')), ('date', '<', context_today().strftime('%Y-%m-%d 23:59:59'))]"/>