Aro*_*ncz 9 python xml python-2.7 odoo odoo-8
我有一个瞬态模型作为对话框.在我的表单视图中,我有一个这样的按钮:
<footer states="partnerId">
<button name="check_tax_id" string="Tovább" type="object"/>
</footer>
Run Code Online (Sandbox Code Playgroud)
该按钮调用此函数(我可以确认它实际调用):
@api.one
def check_tax_id(self, context=None):
self.state = "partnerDetails"
return None;
Run Code Online (Sandbox Code Playgroud)
我的问题是,单击此按钮后,对话框窗口立即关闭!我究竟做错了什么?
Che*_*uCR 24
解决方案0
@api.multi
def check_tax_id(self):
self.ensure_one()
self.name = "New name"
return {
"type": "ir.actions.do_nothing",
}
Run Code Online (Sandbox Code Playgroud)
这种溶液提供了这里由塔德乌什·卡尔平斯基.
解决方案1
您可以返回具有相同记录ID的新表单.
@api.multi
def check_tax_id(self):
self.ensure_one()
self.name = "New name"
return {
'context': self.env.context,
'view_type': 'form',
'view_mode': 'form',
'res_model': 'model_name',
'res_id': self.id,
'view_id': False,
'type': 'ir.actions.act_window',
'target': 'new',
}
Run Code Online (Sandbox Code Playgroud)
解决方案2
您可以在jQuery中创建一个小部件.这将打开向导,您可以手动将所需的行为分配给按钮.您也可以使用该call函数来调用python函数:
[...]
new instance.web.Dialog(this, {
title: _t("Title"),
width: '95%',
buttons: [
{ text: _t("First button"), click: function() { self.first_button(); }},
{ text: _t("Second button"), click: function() { self.second_button(); }},
{ text: _t("Close"), click: function() { dialog.close(); }},
],
});
[...]
Run Code Online (Sandbox Code Playgroud)
解决方案3
当然,您也可以覆盖create方法,以避免在某些情况下创建记录
解决方案4
最后一个选择.使用州字段创建工作流程.创建工作流按钮以发送信号以更改状态.您可以使用attrs属性和state字段显示或隐藏其余字段.但我不知道这是否能适应您的需求.
小智 7
在我的情况下,此代码有效.
@api.multi
def test(self):
l = logging.getLogger()
l.warn("xD")
return {
"type": "ir.actions.do_nothing",
}
Run Code Online (Sandbox Code Playgroud)
小智 6
最简单的做法是:
@api.multi
def null_action(self):
return {
"type": "set_scrollTop",
}
Run Code Online (Sandbox Code Playgroud)
由于该类型用于调用类 ActionManager 上的任何方法(javascript)
它比产生异常的 "type": "ir.actions.do_nothing" 更好(此属性不存在)