2014-09-24 1 views
0

Я хотел бы добавить поля из моего product.product в мою недавно созданную форму Expense (legacy_expense), которая наследует hr.expense.expense. Я создал этот модуль для редактирования рабочего процесса модуля управления расходами - мне это удалось.Добавление полей из другого объекта в форму в OpenERP

Я новичок в OpenERP, и у меня возникают проблемы с его работой. Я пробовал наследовать поле many2one product_id в форме через мое .py-поле, а затем получить его для отображения в xml, но всегда появляется ошибка «XMLSyntaxError: ошибка конструкции атрибутов, строка 25, столбец 13»

I «Угадаю, что мое наследование неверно, и я не знаю, как связать эти два объекта. Если кто-то сможет мне помочь, это будет здорово!

Это мой подгонять legacy_expense.py файл:

from openerp.osv import fields, osv 

class legacy_expense(osv.osv): 


     _inherit = 'hr.expense.expense' 

     _columns = { 
     'state': fields.selection([ 

     ('draft', 'New'), 
     ('cancelled', 'Refused'), 
     ('confirm', 'Waiting Approval'), 
     ('done', 'Paid'), 

     ], 'Order State', readonly= False, select=True), 


     'product_id': fields.many2one('product.product','Product',required=True), 


    } 

legacy_expense() 

Это файл legacy_expense.xml:

<?xml version="1.0" encoding="utf-8"?> 
<openerp> 
    <data> 
    <record id = "view_expenses_form_custom" model="ir.ui.view"> 
     <field name="name">view.expenses.form.custom</field> 
     <field name="model">hr.expense.expense</field> 
     <field name="type">form</field> 
     <field name="inherit_id" ref="hr_expense.view_expenses_form" /> 
     <field name="arch" type="xml"> 

       <data> 
        <header> 
         <button name="signal_draft_to_confirm" states="draft" string="Submit" type="workflow" groups="base.group_hr_user" /> 
        </header> 

       <header> 
         <button name="signal_confirm_to_done" states="confirm" string="Approve Expense" type="workflow" groups="base.group_hr_user" /> 
        </header> 

       <header> 
         <button name="signal_confirm_to_refused" states="confirm" string="Reject Expense" type="workflow" groups="base.group_hr_user" /> 
        </header> 
       </data> 
     <xpath expr = "/form/sheet/group/group[2]/field[@name='user_valid']"position="after"> 
       <field name="product_id"/> 
     </xpath> 
     </field> 
    </record> 
</data> 
</openerp> 

Опять же, заранее спасибо всем, кто может помочь!

ответ

1

Любое поле, которое вы хотите показать на форме для модели, должно быть на модели. В этом случае, если вы хотите отображать поля из продукта, самым простым является создание связанного поля.

Если, например, вы хотите показать поле «код» на product.product, то добавьте столбец, подобный этому.

'product_code': fields.related('product_id', 'code', type = 'char', readonly = True) 

и вы можете просто использовать поле с вашей точки зрения, как:

<field name="product_code" /> 

Обратите внимание на первый аргумент в соответствующем поле является имя вашего many2one поля в модели, которая ссылается product.product ,

Другая классная вещь, что вы можете цепи это, так что вы могли бы сделать что-то вроде:

'currency_name': fields.related('product_id', 'company_id', 'currency_id', 'name', type = 'char', readonly = True) 

Есть несколько подводных камней, если вы хотите, чтобы обратиться к соответствующей области, такие как many2one по соответствующей таблице , Посмотрите документацию по связанным полям в момент разработчика на odoo.com

+0

Спасибо за отличный ответ. Мне не удалось заставить его работать. Я предполагаю, потому что мне нужно будет добавить таблицу продуктов, когда я наследую файл .py? Кроме того, нужно ли изменять зависимости при ссылках на поля из других модулей в файле __openerp__.py? Спасибо за помощь! –

+0

Кроме того, я получаю сообщение об ошибке «не удалось установить ограничение NOT NULL в столбце« project_id »! Если вы хотите его получить, вы должны обновить записи и выполнить их вручную: ALTER TABLE hr_expense_expense ALTER COLUMN project_id SET NOT NULL " Нужно ли использовать методы GET(), чтобы получить название проекта в форме« Расходы »? Благодарю. –

0

В вашем файле наследования или py нет ничего плохого. Проблема заключается в вашем xml-файле и кажется синтаксической ошибкой. Я считаю, что его надо делать со следующей строкой в ​​Уре XML файл

<xpath expr = "/form/sheet/group/group[2]/field[@name='user_valid']"position="after"> 

Ну добавьте пробел между XPATH выражом и положением следующим образом:

<xpath expr = "/form/sheet/group/group[2]/field[@name='user_valid']" position="after"> 

Это позволит решить вашу проблему. Спасибо и приветствую