OpenERP7 - 根据当前日期隐藏按钮

时间:2013-09-25 16:18:39

标签: xml openerp

当当前日期与字段日期不同时,我试图变成隐形按钮,我的意思是我只需要在当前日期与字段日期相同时显示按钮

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

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

我收到的错误消息是“NameError:name'context_today'未定义”。

我还尝试使用以下代码:

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

后者不会给我错误但不会做所需要的,当f_inicio不等于当前日期时隐藏按钮。

如果我能伸出援助之手是非常欣赏的,

注意:“f_inicio”的类型为“datetime”,我希望将此按钮隐藏在视图的“标题”部分中。

我已经看到了@Arya(OpenERP How to make a button invisible when datetime field != date today)的回应,但我也没有做过。

2 个答案:

答案 0 :(得分:1)

由于f_inicio是一个日期时间,你只需要比较最简单的布尔功能字段的日期。我正在火车上的记忆中打字,所以要提前道歉,不要有任何错误。

来自openerp.tools的

导入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更改,并在结果中返回功能字段的新计算值。从on_change返回它们是完全可以的,新值将用于重新设置attrs。

答案 1 :(得分:0)

在py文件中,

您可以创建名为“current_date”的字段作为日期时间,并为_defaults

提供 current_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"