Я пытаюсь настроить вид формы BOM с настраиваемым столбцом в строках спецификации, на основе https://www.odoo.com/apps/modules/7.0/mrp_bom_product_details/Добавить столбец в спецификации линии в OpenERP v8
Моей попытки скрученной в следующем состоянии:
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
там, он работает из других мест в виде спецификации. Например:
<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
? Есть что-то особенное на странице ноутбука?
Update
Работа пй файла:
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>
Ваше второе предположение, что я пытаюсь выполнить, но не повезло еще. Я изменил файл .py, чтобы определить класс mrp_bom_line, унаследованный от mrp.bom.line, и изменил файл xml со вторым предложением.Затем Odoo сообщает, что 'product_qty_available' не существует. –
можете ли вы разместить свой код здесь для этого файла «.py». Вы перезапустили сервер и обновили модуль? –
Если я также изменю модель на mrp.bom.line в xml-файле, Odoo выдает ошибку, которая «Поле' message_follower_ids' не существует ». –