2014-09-24 68 views
0

我想將我的product.product中的字段添加到我新創建的支持hr.expense.expense的Expense表單(legacy_expense)中。我創建了這個模塊來編輯費用管理模塊的工作流程 - 我設法做得很好。將來自不同對象的字段添加到OpenERP中的表單中

我是OpenERP的新手,並且無法正常工作。我嘗試通過我的.py字段繼承表單中的many2one product_id字段,然後將其顯示在xml中,但始終出現錯誤「XMLSyntaxError:attributes construct error,line 25,column 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文件中其他模塊的字段時,是否必須更改依賴關係?謝謝您的幫助! – 2014-09-29 13:59:27

+0

另外,出現錯誤 「無法對列'project_id'設置NOT NULL約束! 如果您想擁有它,應該更新記錄並手動執行: ALTER TABLE hr_expense_expense ALTER COLUMN project_id SET NOT NULL「 我是否需要使用GET()方法讓項目名稱出現在費用表單中?謝謝。 – 2014-09-29 14:43:30

0

您的繼承或py文件沒有任何問題。問題在於你的xml文件,它似乎是一個語法錯誤。我相信,它得到與以下行來在烏拉圭回合xml文件

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

那麼添加的XPath EXPR和位置之間的空間,具體如下:

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

這將解決您的問題。 感謝和問候

相關問題