当当前日期与字段日期不同时,我试图变成隐形按钮,我的意思是我只需要在当前日期与字段日期相同时显示按钮
我正在尝试使用在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)的回应,但我也没有做过。
答案 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"