2014-09-24 4 views
0

내 product.product의 필드를 hr.expense.expense를 상속 한 새로 작성한 비용 양식 (legacy_expense)에 추가하고 싶습니다. 이 모듈을 작성하여 비용 관리 모듈의 워크 플로를 편집했습니다.OpenERP에서 다른 객체의 양식을 양식에 추가

OpenERP를 처음 사용하고 있으며 문제가 발생하는 데 문제가 있습니다. 나는 내 .py 필드를 통해 폼의 many2one product_id 필드를 상속 한 다음 XML에 표시하려고했지만 항상 "XMLSyntaxError : attributes constructue error, line 25, column 13"이 표시됩니다.

내 상속이 정확하지 않다고 생각하고 두 대상을 어떻게 관련 지을 모릅니다. 누군가가 나를 도와 줄 수 있다면 좋을 것입니다!

이 내 사용자 정의 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에 "code"필드를 표시하려면 다음과 같은 열을 추가하십시오.

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

당신은 다음 그냥보기에서 필드를 사용할 수 있습니다

<field name="product_code" /> 

참고 관련 분야에 대한 첫 번째 인수는 product.product를 참조 모델에 many2one 필드의 이름입니다 .

다른 멋진 것은 당신이 체인이 그래서 당신이 뭔가를 할 수 할 수 있습니다 :

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

개는 몇는 관련 테이블에 many2one으로이 당신이 관련 분야를 참조하려면 있습니다 . odoo.com에서 developer momento의 관련 필드에 대한 문서를 확인하십시오.

+0

위대한 답변을 주셔서 감사합니다. 나는 그걸 제대로 작동시키지 못했다. .py 파일을 상속 할 때 제품 테이블을 추가해야하기 때문에 추측하고 있습니다. 또한 __openerp__.py 파일의 다른 모듈에서 필드를 참조 할 때 종속성을 변경해야합니까? 도와 주셔서 감사합니다! –

+0

또한 오류가 발생했습니다 "project_id '열에 NOT NULL 제약 조건을 설정할 수 없습니다! 레코드를 업데이트하고 수동으로 실행해야합니다. ALTER TABLE hr_expense_expense ALTER COLUMN project_id SET NOT NULL " 프로젝트 이름을 비용 서식에 표시하려면 GET() 메서드를 사용해야합니까? 감사. –

0

상속 또는 py 파일에는 아무런 문제가 없습니다. 문제는 XML 파일에 있으며 구문 오류 인 것 같습니다. 나는 다음과 같이 그 당함, UR 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"> 

이 문서가 문제를 해결하는 것입니다. 감사합니다, 그리고 안부