如何添加按钮或链接以重定向到树视图odoo 12中的另一个模型



我尝试过用XML给出widget='url',实际上,我想做的是,我有一个模型,名为a和B,a和B的关系是One2many。所以我想从模型A中的树视图加载到模型B。(就像从表单视图中单击按钮时加载模型B一样,就像从树视图中可以实现吗?

class test(models.Model):
_name = 'consultation'
test_id = fields.One2many('case.sheet','consultation_id',string='Case Sheet Id')

当您单击树视图中的一行时,Odoo将加载default表单视图以显示相应的行记录。

url小部件使用字段值作为href属性的值(如果我们没有指定text属性,它将使用字段值(。

button元素可以是列表视图的子元素,为了显示不同于树视图中使用的自定义表单视图,您可以在test_id字段的树视图中添加一个类型为object的按钮,并在case.sheet中声明一个同名方法。

示例:

声明case.sheet模型中的方法:

class CaseSheet(models.Model):
_name = 'case.sheet'
@api.multi
def open_form_view(self):
self.ensure_one()
form_view = self.env.ref('MODULE.XML_VIEW_ID')
return {
'name': _('Case sheet'),
'res_model': 'case.sheet',
'res_id': self.id,
'views': [(form_view.id, 'form'), ],
'type': 'ir.actions.act_window',
'target': 'new',
}

将按钮添加到树状视图:

<field name="test_id">
<tree editable="bottom">
<field name="name"/>
<button name="open_form_view" type="object" string="View" class="oe_highlight"/>
</tree>
</field>

您可以通过一个按钮和一个操作来实现这一点。首先,您需要在树视图中添加一个按钮:

<button type="object" name="go_to_model_B" string="To Model B" icon="fa-search"/>

这里的名称道具是模型a中的一种方法(图标是可选的,但我认为它看起来更好(。方法如下:


# Method in Model A
def go_to_model_B(self):
name_form = _('FORM B')
return {
'name': NAME_FORM,
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'MODEL.B',
'res_id': self.consultation_id.id,  # Reference to the other model
'target': 'new',
'view_id': self.env.ref(
'FORM_VIEW_MODEL_B').id,
'context': {} # Optional
}

也许你想在一个新的选项卡中打开表单,这里有另一个选项:

import werkzeug.utils
def go_to_model_B(self):
url_base = "{}/web?&#id={}&view_type=form&model={}&action={}'"
action = "MODULE.ACTION_FORM_MODEL_B" # Name of the action defined in some XML
model_name = "MODEL.B"
target_record_id = self.consultation_id.id
url = url_base.format(domain, target_record_id, model_name, action)
return werkzeug.utils.redirect(url)

另一种方法是使用ir.actions.act_url:

def go_to_model_B(self):
return {
'name': "TO MODEL B"
'type': 'ir.actions.act_url',
'url': url,  # The url is the same as above
'target': 'new'
}

最新更新