0

レポート パーサーを使用しようとしていますが、常にエラーが表示されます

ValueError  The _name attribute report.test_module.report_test_doc is not valid

Odoo で使用するために、あなたのレポート名がパーサー _template と _name に使用されていることを調べました。test_module を削除してもエラーは表示されませんが、hello() は呼び出し可能ではありません。

レポート.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data>
        <report 
            id="eport_monthly_pdc"
            string="Monthly report of PDC"
            model="account.voucher"
            report_type="qweb-pdf"
            name="test_module.report_test_doc" 
            file="test_module.report_test_doc" 
        />
    </data>
</openerp>

report_parser.py

from openerp import api, models
from openerp.report import report_sxw
import time
class report_parser(report_sxw.rml_parse):
    def __init__(self, cr, uid, name, context):
        super(report_parser, self).__init__(cr, uid, name, context=context)
        self.localcontext.update({     
            'time': time,            
            'hello_world': self._hello,
        })
    def _hello(self):
        return "Hello World!"

class report_parser_test(models.AbstractModel):
    _name = 'report.test_module.report_test_doc'
    _inherit = 'report.abstract_report'
    _template = 'test_module.report_test_doc'
    _wrapped_report_class = report_parser

report_test_doc.xml

<openerp>
<data> 
<template id="report_test_doc">
    <t t-call="report.html_container">
        <t t-foreach="docs" t-as="o">
            <t t-call="test_module.report_test_layout">
                <div class="page">
                    <div class="text-center">
                        <span t-esc="hello_world()"/>
                    </div>
                </div>
            </t>
        </t>
    </t>
</template>
</data>
</openerp>
4

2 に答える 2

2

あなたの場合、基本的に、

Qweb レポートは主に、各レポート タイプのすべてのクラス エントリのモデルを使用して呼び出しmodels.AbstractModel、パーサー クラス エントリのクラスで継承するために使用されます。

class report_parser_test(models.AbstractModel):
    _name = 'report.test_module.report_test_doc'
    _inherit = 'report.abstract_report'
    _template = 'test_module.report_test_doc'
    _wrapped_report_class = report_parser

各 Qweb レポート パーサー クラス エントリの属性:

常に始まる_name属性report.<your report template id>

_inherit = 'report.abstract_report' レポート モジュール (すべてのレポートの基本クラス) にある report.abstract_report の既定の継承です。

_template = 'test_module.report_test_doc'

基本的には<your module name>.<your report template id>

_wrapped_report_class = report_parser

これは、レポート ロジックとレポートの計算ロジックを含むパーサー クラスのエントリの一部です。

**そして、hello() 呼び出しを呼び出そうとしている別のこと:

あなたの場合、関数が宣言され、レポートパーサークラスが適切に追加されましたが、Qweb テンプレートファイルでその関数を呼び出す必要があります

好き..

<span t-esc="hello()"/>

次に、その関数を自分の側から呼び出します。

私の答えがあなたに役立つことを願っています:)

于 2016-03-04T08:29:46.723 に答える