如何访问 QWeb 报告中的字段?奥杜 17

问题描述 投票:0回答:1

我有这个 Python 模型来获取我想要使用的数据。

实际上所有这些代码都工作正常,也许还有改进的空间,但它获取了我需要的数据,我已经测试过,这部分一切都很好。

from odoo import models, fields

class AccountMove(models.Model):
    _inherit = "account.move"

    fecha_cierre = fields.Date(string="Día del cierre", required=True)
    user_id = fields.Many2one("res.users", string="Cajero", required=True, readonly=False)

    def action_print_report(self):
        facturas = self.env["account.move"].search([
            "|",
            ("move_type", "in", ["out_invoice", "out_refund"]),
            ("factura_especial", "=", True),
            ("invoice_date", "=", self.fecha_cierre),
            ("create_uid", "=", self.user_id.id)
        ])

        data = {
            "facturas": facturas
        }

        return self.env.ref("cierre_caja.report_cierre_de_caja").report_action(self, data=data)

我有这个 xml 模板

我使用了在互联网上找到的一些代码作为指导,甚至询问了 ChatGPT 一点,这是对我来说有意义的最终代码,

<odoo>
  <template id="report_cierre_de_caja_id">
    <t t-call="web.html_container">
      <t t-call="web.external_layout">
        <div class="page">
          <div class="oe_structure">
            <div class="text-center">
              <h2>Cierre de caja</h2>
            </div>
          </div>
          <table class="table table-sm table-hover">
            <thead>
              <tr>
                <th>NO.</th>
              </tr>
            </thead>
            <tbody>
              <t t-foreach="facturas" t-as="factura">
                <tr>
                  <td>
                    <t t-field="factura.name" />
                  </td>
                </tr>
              </t>
            </tbody>
          </table>
        </div>
      </t>
    </t>
  </template>
</odoo>

虽然它看起来结构良好,但它给了我这个错误

File "D:\Documentos\odoo\odoo\addons\base\models\ir_qweb.py", line 773, in _generate_code
    raise QWebException("Error when compiling xml template",
odoo.addons.base.models.ir_qweb.QWebException: Error when compiling xml template
AssertionError: t-field can not be used on a t element, provide an actual HTML node
Template: cierre_caja.report_cierre_de_caja_id
Path: /t/t/div[1]/table/tbody/t/tr/td/t
Node: <t t-field="factura.name"/>

The above server error caused the following client error:
RPC_ERROR: Odoo Server Error
    RPC_ERROR
        at makeErrorFromResponse (http://localhost:8069/web/assets/ac28ed4/web.assets_web.min.js:2888:163)
        at decoder.onload (http://localhost:8069/web/assets/ac28ed4/web.assets_web.min.js:2874:7)

我在这部分做错了什么?

python xml odoo qweb odoo-17
1个回答
0
投票

代码中的任何位置都没有定义变量“facturas”。因此,Odoo 应该将其默认(在 qweb 报告中可用)变量定义为:

doc_ids
docs
doc_model

docs
应该是您在
facturas
中搜索的记录集。所以你的 QWeb 代码应该如下所示:

              <!-- ... -->
              <t t-foreach="docs" t-as="doc">
                <tr>
                  <td>
                    <t t-field="doc.name" />
                  </td>
                </tr>
              </t>
              <!-- ... -->

即使没有必要,我也将

factura
更改为
doc
。只是为了遵守 Odoo 代码命名原则(有一些......)。

您可以在方法

ir.actions.report
中的模型
_get_rendering_context
中找到默认的QWeb报告渲染上下文。

© www.soinside.com 2019 - 2024. All rights reserved.