我有一个用作对话的 transient 模型。在我的表单 View 中,我有一个这样的按钮:
<footer states="partnerId">
<button name="check_tax_id" string="Tovább" type="object"/>
</footer>
按钮调用此函数(我可以确认它确实调用了):
@api.one
def check_tax_id(self, context=None):
self.state = "partnerDetails"
return None;
我的问题是,一旦我点击这个按钮,对话窗口就会立即关闭! 我做错了什么?
最佳答案
解决方案 0
@api.multi
def check_tax_id(self):
self.ensure_one()
self.name = "New name"
return {
"type": "ir.actions.do_nothing",
}
此解决方案已提供 here塔德乌什·卡尔平斯基 (Tadeusz Karpinski) 着。
解决方案一
您可以返回具有相同记录 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',
}
方案二
您可以在 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(); }},
],
});
[...]
方案三
当然你也可以重写create方法,避免某些情况下记录的创建
方案四
最后一个选项。创建带有状态字段的工作流。创建工作流按钮以发送信号以更改状态。您可以使用 attrs 属性和 state 字段显示或隐藏其余字段。但是不知道能不能满足你的需求。
关于python - Odoo - 防止按钮关闭向导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963214/