我尝试将域添加到sale.order.line
的Odoo字段。具体来说,我试图确保可供选择的唯一路线是与订单行相关的产品同名的路线。这是我的尝试:
以下是route_id
上sale.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'
有人知道将此域添加到视图的正确方法吗?
答案 0 :(得分:0)
你是对的,product_id
是一个ID而不是一个记录,所以在域评估期间链调用不起作用。为了正确评估域,域中使用的值字段必须存在于视图中。
要实现这一目标,您可以添加related field到sale.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)]"/>