如何将域应用于按钮?

问题描述:

我想通过一个默认域从一个按钮应用到目标操作。
事情是这样的:如何将域应用于按钮?

<!-- action --> 
<act_window id="action_target" 
      name="Project Categories" 
      res_model="addon.model" 
      view_mode="kanban,tree,form"/> 

<!-- button --> 
<button class="btn btn-primary" 
     type="action" 
     name="%(action_target)d" 
     domain="[('field_x', '=', self.id)]"> 
    Do Something 
</button> 

我这样做是正确的,现在的方式是通过触发打开一个新的操作窗口的功能:

@api.multi 
def action_target(self): 
    self.ensure_one() 
    return { 
    'type': 'ir.actions.act_window', 
    'src_model': self._name, 
    'res_model': 'addon.model', 
    'view_mode': 'kanban,tree,form', 
    'domain': [('field_x', '=', self.id)], 
    'target': 'main', 
    } 

意外行为自带的方式,我在做它是路径不保留对像动作按钮上一个窗口的作用:

enter image description here

我希望它留样:

enter image description here

那怎么可以实现?

我不太清楚你想要做什么,但在这里我们去:

如果你想打开另一个视图显示了所有记录,其中field_x = self.id

使用'search_default_field_x': self.id在你行动的背景下。这应该通过搜索集打开您的视图,查找field_x等于self.id的每个记录。您可能需要定义一个搜索视图,该搜索视图能够在field_x上进行搜索才能正常工作(如果该视图不在视图中,则default不会填充该字段)。

我认为这回答了您的标题和问题的第一部分的问题。

如果你不想打破面包屑:

基于odoo 10.0 documentation

窗口操作(ir.actions.act_window)

目标(可选)是否应在主要内容 区域(当前),全屏模式(全屏)或对话框/弹出窗口 (新增)中打开视图。使用main而不是current来清除面包屑。默认 为当前值。

因此,尝试使用current而不是new,它应该做你想做的事情。至少,它适用于我为我公司编写的一些代码,但这是针对odoo 8的。由于这是默认设置,因此这是它在第一个代码段中的作用原因。

你应该试试以下。

<record id="action_target" model="ir.actions.act_window"> 
    <field name="name">Project Categories</field> 
    <field name="res_model">addon.model</field> 
    <field name="view_mode">kanban,tree,form</field> 
    <field name="context">{ 
     'search_default_field_x': [active_id], 
     'default_field_x': active_id, 
     } 
    </field> 
</record> 

您可以在行动中使用上下文设置默认搜索值。有关更多 的详细信息,请参阅项目模块并在项目模块中参考“任务” 按钮。你想在这里做的是一样的。