odoo [QWEB]无法从模板调用方法

时间:2017-12-12 10:36:56

标签: templates odoo-9 qweb

我尝试从模板调用模型方法并收到错误:

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

模型有这样的观点:

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

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

安全设置:

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>

1 个答案:

答案 0 :(得分:0)

如果查看方法_prepare_qcontext(odoo / addons / website / models / ir_ui_view.py),您会看到变量website在那里被定义,这就是为什么对website.is_user()的调用有效。所以我认为您可能需要覆盖_prepare_qcontext并向其返回的对象添加testmodule的实例,因此您可以从xml中调用get_session_data