2017-12-12 28 views
1

에서 메소드를 호출 할 수 없습니다odoo [Qweb을] 내가 템플릿에서 모델의 메서드를 호출하고 오류가 발생하려고 템플릿

class testmodule(models.Model): 
    _name = 'testmodule' 

    def get_session_data(self, cr, uid, ids, context=None): 
     return u'READING' 

보안 설정 :

QWebException: "'NoneType' object has no attribute 'get_session_data'" while evaluating 
'testmodule.get_session_data()' 

모델은 볼 수있다

access_testmodule,testmodule,model_testmodule,,1,1,1,1 

Qweb을 템플릿 :

<t t-esc="testmodule.get_session_data()" /> 

내가 뭘 잘못하고 있니? 웹 사이트 모델에서 메서드를 호출하려고하면 모든 작업이 정상적으로 처리됩니다. 나는 그들 자신의 수업과 방법을 사용하고 싶다. 내가 어떻게 해?

UPD : templates.xml :

<template id="website.user_navbar" inherit_id="website.layout" groups="base.group_user"> 
    <xpath expr="//body/div['id=wrawrap']" position="before"> 
     <div style="background-color: #000800; height:110px;color: red"> 
      | <t t-raw="website.is_user()" /> |<br /> 
      | <t t-esc="testmodule.get_session_data()" /> | 
     </div> 
    </xpath> 
</template> 
+0

testmodule이 정의되지 않았습니다. JavaScript에서 get_session_data를 호출 한 다음 결과를 렌더링해야 할 수도 있습니다. 더 많은 XML 코드를 표시 할 수 있습니까? – Lucas

+0

게시 할 업데이트를 추가했습니다. – Skif

+0

잘 모르겠지만 _prepare_qcontext (odoo/addons/website/models/ir_ui_view.py) 메소드를 살펴보면 변수 웹 사이트가 정의되어있는 것을 볼 수 있습니다. 따라서 website.is_user () 작동합니다. 그래서 _prepare_qcontext를 오버라이드하고 testmodule의 인스턴스를 반환 객체에 추가해야 할 필요가 있다고 생각합니다. 따라서 xml에서 get_session_data를 호출 할 수 있습니다. – Lucas

답변

0

당신이 방법 _prepare_qcontext (odoo/애드온/웹 사이트/모델/ir_ui_view.py)을 보면, 당신은 변수 website가이 정의되어 있는지 볼 것이다, 그렇기 때문에 website.is_user()에 대한 호출이 작동합니다. 그래서 _prepare_qcontext을 오버라이드하고 testmodule의 인스턴스를 반환하는 객체에 추가해야 할 수도 있으므로 xml에서 get_session_data을 호출 할 수 있습니다.