如何将服务器操作代码从旧API移动到新API?

时间:2017-12-21 10:15:42

标签: python xml python-2.7 odoo-8 odoo

我正在使用Odoo v8并且我已经创建了一个正常运行的服务器操作,但为了管理我必须在旧API中编写它,经过大量尝试在新API中执行它。

这是我的代码,旧API 中的代码,现在正在使用:

的Python

def open_action_alt_picking_type_views(self, cr, uid, ids, context=None):
    res = {
        'view_type': 'form',
        'view_mode': 'kanban',
        'res_model': 'stock.picking.type',
        'type': 'ir.actions.act_window',
        'target': 'current',
    }
    return res

XML

<record id="server_action_alt_picking_type_views" model="ir.actions.server">
    <field name="name">Picking types</field>
    <field name="condition">True</field>
    <field name="type">ir.actions.server</field>
    <field name="model_id" ref="model_stock_picking_type"/>
    <field name="state">code</field>
    <field name="code">action = self.open_action_alt_picking_type_views(cr, uid, context.get('active_ids', []), context=context)</field>
</record>

这是新API 无法正常工作的尝试之一:

的Python

@api.model
def open_action_alt_picking_type_views(self):
    res = {
        'view_type': 'form',
        'view_mode': 'kanban',
        'res_model': 'stock.picking.type',
        'type': 'ir.actions.act_window',
        'target': 'current',
    }
    return res

XML

<record id="server_action_alt_picking_type_views" model="ir.actions.server">
    <field name="name">Picking types</field>
    <field name="condition">True</field>
    <field name="type">ir.actions.server</field>
    <field name="model_id" ref="model_stock_picking_type"/>
    <field name="state">code</field>
    <field name="code">action = self.open_action_alt_picking_type_views()</field>
</record>

我尝试使用@api.multi,没有装饰器,在XML return字段中的de方法调用之前添加code等。

有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:2)

我认为您需要在调用方法时指定模型,如下所示:

<field name="code">action = env['stock.picking.type'].open_action_alt_picking_type_views()</field>