1

我正在尝试使用 BOM 行中的自定义列自定义 BOM 表单视图,基于https://www.odoo.com/apps/modules/7.0/mrp_bom_product_details/

我的尝试陷入以下状态:

custom_bom_form.py:

from openerp.osv import fields, osv
from openerp.tools.translate import _

class mrp_bom(osv.osv):
    _inherit = 'mrp.bom'

    _columns ={
        'product_qty_available': fields.related('product_id', 'qty_available', type='float', string='Quantity On Hand', readonly=True),
    }
    _defaults = {
    } 

mrp_bom()

custom_bom_form.xml:

<?xml version="1.0"?>
<openerp>
    <data>

        <record id="mrp_bom_form_view_product_details" model="ir.ui.view">
            <field name="name">mrp.bom.form.product_details</field>
            <field name="model">mrp.bom</field>
            <field name="inherit_id" ref="mrp.mrp_bom_form_view"/>    
            <field name="arch" type="xml">
                <xpath expr="//notebook/page[@string='Components']/field/tree[@string='Components']/field[@name='product_qty']" position="after" >
                    <field name="product_qty_available" />
                </xpath> 
            </field>
        </record>

    </data>
</openerp>

这会在安装模块时导致 Odoo 出错:

ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition

Error details:
Field `product_qty_available` does not exist

Error context:
View `mrp.bom.form.product_details`
[view_id: 1094, xml_id: n/a, model: mrp.bom, parent_id: 675]" while parsing /usr/lib/python2.7/dist-packages/openerp/addons/mrp_bom_product_details/mrp_bom_product_details.xml:5, near
    <record id="mrp_bom_form_view_product_details" model="ir.ui.view">
        <field name="name">mrp.bom.form.product_details</field>
        <field name="model">mrp.bom</field>
        <field name="inherit_id" ref="mrp.mrp_bom_form_view"/>    
        <field name="arch" type="xml">
            <xpath expr="//notebook/page[@string='Components']/field/tree[@string='Components']/field[@name='product_qty']" position="after">
                <field name="product_qty_available"/>
            </xpath> 
        </field>
    </record>

我不知道为什么我不能product_qty_available在那里引用,它可以在 BOM 表单中的其他地方工作。例如:

        <field name="arch" type="xml">
            <field name="product_id" position="after">
                <field name="product_qty_available" />
            </field> 
        </field>

作品。

也改为将引用的字段更改为系统知道有效的内容,例如添加另一product_qty列:

        <field name="arch" type="xml">
            <xpath expr="//notebook/page[@string='Components']/field/tree[@string='Components']/field[@name='product_qty']" position="after" >
                <field name="product_qty" />
            </xpath> 
        </field>

有人可以告诉我我做错了什么。我如何在那里参考product_qty_available?笔记本页面有什么特别之处吗?

更新

工作 py 文件:

from openerp.osv import fields, osv
from openerp.tools.translate import _

class mrp_bom_line(osv.osv):
    _inherit = 'mrp.bom.line'

    _columns ={
        'product_qty_available': fields.related('product_id', 'qty_available', type='float', string='Quantity On Hand', readonly=True),
    }
    _defaults = {
    }

mrp_bom_line()

和 xml 文件:

<?xml version="1.0"?>
<openerp>
    <data>

        <record id="mrp_bom_form_view_product_details" model="ir.ui.view">
            <field name="name">mrp.bom.form.product_details</field>
            <field name="model">mrp.bom</field>
            <field name="inherit_id" ref="mrp.mrp_bom_form_view"/>    
            <field name="arch" type="xml">
                <xpath expr="//field[@name='bom_line_ids']/tree/field[@name='product_qty']" position="after">
                    <field name="product_qty_available" />
                </xpath>
            </field>
        </record>

    </data>
</openerp>
4

1 回答 1

1

您已经product_qty_available在模型中添加了该字段,mrp.bom并且您正在尝试在该字段的内部添加该字段bom_line_ids- 在树视图中bom_line_ids是 one2many of mbrp.bom.line,因此系统会尝试product_qty_availablemrp.bom.line模型中找到实际上不存在的字段。

我不确定,您的确切目标是什么,但是,请尝试以下操作

1.该字段已添加到模型中,mrp.bom因此您应该尝试以下操作

<xpath expr="/form/group/group[1]/field[@name='product_id']" position="after">
    <field name="product_qty_available"/>
</xpath>

因此这将product_id在屏幕顶部显示主信息的字段后添加字段。

2.在mrp.bom.line模型中添加字段,然后尝试以下操作:

<xpath expr="//field[@name='bom_line_ids']/tree/field[@name='product_qty']"  position="after">
    <field name="product_qty_available"/>
</xpath>
于 2015-02-04T18:56:13.117 回答