2015-02-04 1 views
1

Я пытаюсь настроить вид формы 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> 

ответ

1

Вы добавили поле product_qty_available в модели mrp.bom и вы пытаетесь добавить поле внутри поля bom_line_ids - в виде дерева bom_line_ids, который является одним2000 из mbrp.bom.line, поэтому система пытается найти поле product_qty_available там, в mrp.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.Add поле в mrp.bom.line модели, а затем попробуйте следующее:

<xpath expr="//field[@name='bom_line_ids']/tree/field[@name='product_qty']" position="after"> 
    <field name="product_qty_available"/> 
</xpath> 
+0

Ваше второе предположение, что я пытаюсь выполнить, но не повезло еще. Я изменил файл .py, чтобы определить класс mrp_bom_line, унаследованный от mrp.bom.line, и изменил файл xml со вторым предложением.Затем Odoo сообщает, что 'product_qty_available' не существует. –

+0

можете ли вы разместить свой код здесь для этого файла «.py». Вы перезапустили сервер и обновили модуль? –

+0

Если я также изменю модель на mrp.bom.line в xml-файле, Odoo выдает ошибку, которая «Поле' message_follower_ids' не существует ». –