2016-12-14 2 views
1

Я пытаюсь добавить домен в поле Odoo для sale.order.line. В частности, я пытаюсь гарантировать, что единственным доступным маршрутом является только тот, который совпадает с именем продукта, связанного с линией заказа. Вот моя попытка:Как ссылаться на дочернюю модель в домене Odoo V10 по представлению XML

Вот оригинал вне коробки определение поля для 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 просто возвращает идентификатор, а не собственно запись. Поэтому, когда я пытаюсь связать вызов с name, он не работает.

я получаю следующее сообщение об ошибке при нажатии в поле Routes на линии порядка:

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

Кто-нибудь знает правильный способ, чтобы добавить этот домен в представлении?

ответ

0

Вы правы в том, что product_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)]"/>