如何在XML视图中引用Odoo V10域中的子模型

时间:2016-12-14 04:44:17

标签: openerp

我尝试将域添加到sale.order.line的Odoo字段。具体来说,我试图确保可供选择的唯一路线是与订单行相关的产品同名的路线。这是我的尝试:

以下是route_idsale.order.line的原始开箱即用字段定义:

 <field name="route_id" groups="sale_stock.group_route_so_lines">

我将其修改为包含如下域名:

<field name="route_id" groups="sale_stock.group_route_so_lines" domain="[('name', '=', product_id.name)]"/>

但是,我似乎无法通过product.product属性访问相关的product_id。据我所知,product_id只是返回id,而不是实际记录本身。因此,当我尝试将呼叫链接到name时,它无法正常工作。

点击订单行上的路线字段时出现以下错误:

Uncaught Error: AttributeError: object has no attribute 'name'

有人知道将此域添加到视图的正确方法吗?

1 个答案:

答案 0 :(得分:0)

你是对的,product_id是一个ID而不是一个记录,所以在域评估期间链调用不起作用。为了正确评估域,域中使用的值字段必须存在于视图中。

要实现这一目标,您可以添加related fieldsale.order.line模型,指向product_id.name

from openerp import fields, models


class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'

    product_name = fields.Char(
        related='product_id.name',
        string='Product Name',
        store=True,
    )

然后,在您的视图的XML定义中,您需要将product_name字段添加到视图中,以便在域内使用它。您可以将invisible属性设置为1,以便不在表单中显示它。现在该字段可以在域中使用:

<field name="product_name" invisible="1"/>
<field name="route_id" groups="sale_stock.group_route_so_lines" 
       domain="[('name', '=', product_name)]"/>