2016-12-14 5 views
1

Ich versuche, eine Domäne zu einem Odoo-Feld für eine sale.order.line hinzuzufügen. Insbesondere versuche ich sicherzustellen, dass die einzige Route, die ausgewählt werden kann, diejenigen sind, die den gleichen Namen haben wie das Produkt, das sich auf die Bestellzeile bezieht. Hier ist mein Versuch:So verweisen Sie auf das untergeordnete Modell in der Odoo V10-Domäne in der XML-Ansicht

Hier ist das Original-out-of-the-box-Felddefinition für route_id auf ein sale.order.line:

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

ich es modifiziert, um eine Domäne umfassen etwa so:

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

Allerdings scheint es mir nicht möglich, über das Attribut product_id auf das zugehörige product.product zuzugreifen. Von dem, was ich sagen kann, gibt die product_id einfach die ID zurück, anstatt die eigentliche Aufzeichnung selbst. Daher, wenn ich versuche, den Anruf an name zu verketten, funktioniert es nicht.

Ich erhalte die folgende Fehlermeldung, wenn auf der Auftragszeile in das Routen Feld klicken:

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

Weiß jemand, der richtige Weg, diese Domain zu der Ansicht hinzufügen?

Antwort

0

Sie haben Recht, product_id ist eine ID und nicht ein Datensatz, so dass Kettenaufruf während der Domänenauswertung nicht funktioniert. Damit die Domäne korrekt ausgewertet wird, muss das Feld, dessen Wert in der Domäne verwendet wird, in der Ansicht vorhanden sein.

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, 
    ) 

Dann Ihrer Ansicht nach der XML-Definition, müssten Sie fügen Sie das product_name Feld zur Ansicht in der Reihenfolge:

Um dies zu erreichen, können Sie ein related field-sale.order.line Modell, indem er auf product_id.name hinzufügen um es innerhalb der Domain zu verwenden. Sie können das invisible Attribut auf 1 festlegen, um es in dem Formular nicht anzuzeigen. Nun kann das Feld in der Domäne verwendet werden:

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