我有这个 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)
我在这部分做错了什么?
代码中的任何位置都没有定义变量“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报告渲染上下文。