0

当当前日期与字段的日期不同时,我试图使按钮变得不可见,我的意思是我只需要在当前日期与字段的日期相同时才显示按钮。

我正在尝试在 xml 中使用 context_today () 来执行此操作,但我做不到,我的隐藏按钮语法是:

attrs = "{'invisible': [('f_inicio', '!=', ((context_today ()). strftime ('%% Y-%% m-%% d')))]}"

我收到的错误消息是“NameError: name 'context_today' is not defined”。

我也尝试了以下代码:

attrs = "{'invisible': [('f_inicio', '!=', __import__ ('time'). strftime ('%% Y-%% m-%% d'))]}"

使用后者不会给我错误但不会执行所需的操作,当 f_inicio 不等于当前日期时隐藏按钮。

如果我能伸出援手是不胜感激,

笔记:“f_inicio”是“datetime”类型,我想隐藏这个放置在视图“header”部分的按钮。

我已经看到@Arya 的响应(OpenERP How to make a button invisible when datetime field != date today)但我也没有工作。

4

2 回答 2

1

由于 f_inicio 是一个日期时间,您只需要比较日期,最简单的将是一个布尔函数字段。我是在火车上从记忆中输入的,所以对于任何错误提前道歉。

from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT (不记得这个 - 检查)

_columns = {'f_inicio_today': fields.function(_is_f_inicio_today, method = True, type = 'boolean', readonly = True, string = 'Is f_inicio today')

def _is_f_inicio_today(self, cr, uid, ids, field, args, context = None):
   res = {}
   for item in self.browse(cr, uid, ids, context = contect):   
      if datetime.strptime(item.f_inicio, DEFAULT_SERVER_DATETIME_FORMAT).strftime(DEFAULT_SERVER_DATE_FORMAT) = fields.date.today():
         res[item.id] = True
      else:
         res[item.id] = False

   return res

然后在您的表格中,如上一个答案

<field name="f_inicio_today" invisible="1" />

attrs = "{'invisible': [('f_inicio_today', '=', True)]}"

还有一点需要注意;如果 f_inicio 字段可以在表单上更改,您将需要添加 on change 并在结果中返回功能字段的新计算值。从 on_change 返回这些是完全可以的,新值将用于重新设置 attrs。

于 2013-09-26T20:00:42.020 回答
0

在 py 文件中,

您可以创建一个名为“current_date”的字段作为日期时间并_defaultscurrent_date

_defaults={
      'current_date': time.strftime("%Y-%m-%d %H:%M:%S")
}

attrs = "{'invisible': [('f_inicio', '!=', current_date)]}"

笔记:

您也只能比较两个日期时间字段或日期字段。如果将 datetime 与 date 进行比较,则条件始终为 false。

datetime: "2013-09-26 05:07:18"
date:"2013-09-26 00:00:00"
于 2013-09-26T10:51:52.193 回答