You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo QWeb技术咨询:如何向记录集添加记录及合并变量

Hey,我来帮你理清这两个QWeb相关的问题:

1. 在QWeb中向记录集(record set)添加记录

首先得明确:QWeb本质是模板渲染引擎,核心工作是把后端传递的数据转成HTML,它本身没法直接修改Odoo的ORM记录集——毕竟记录集是后端Python层面的ORM对象,涉及数据库操作,得在Python代码里处理才合规。

不过分两种场景看:

  • 如果你说的"记录集"是前端临时数组(不是ORM的record set):那可以直接在QWeb里嵌入JavaScript来添加元素,比如:
<script>
    // 假设a是你的前端数组变量
    let a = [{name: "Old Item"}];
    let b = {name: "New Item"};
    a.push(b); // 把b添加到a里
</script>
  • 如果确实要操作Odoo ORM记录集:得在后端Python代码里处理,比如给模型加个方法来创建新记录并合并到现有记录集:
class YourModel(models.Model):
    _name = 'your.model'

    def add_new_record(self):
        # 创建新记录
        new_record = self.env['your.model'].create({'field_name': 'field_value'})
        # 合并现有记录集和新记录,返回更新后的集合
        return self | new_record

之后在视图对应的动作或控制器里调用这个方法,把更新后的记录集传给QWeb模板渲染就行。

2. 在QWeb中将变量b添加到变量a中

这个得看a和b的类型来选方法:

场景1:a是字符串

如果a、b都是字符串,直接用QWeb的表达式拼接就行:

<p>拼接结果:{{ a + b }}</p>

或者用格式化写法更清晰:

<p>拼接结果:{{ "%s%s" % (a, b) }}</p>

场景2:a是数组/列表

如果a是后端传过来的列表,或者前端的数组:

  • 后端表达式层面:如果b是单个元素,要先把b转成列表再合并:
<p>合并后的列表:{{ a + [b] }}</p>
  • 前端JavaScript层面:直接用数组的push()方法:
<script>
    let a = ['apple', 'banana'];
    let b = 'orange';
    a.push(b);
</script>

场景3:a是ORM记录集

和第一个问题一样,QWeb里没法直接修改,得在后端Python里合并记录集:

# 后端代码中合并:b可以是单个记录或另一个记录集
updated_record_set = a | b

然后把updated_record_set传递给QWeb模板使用就好。

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:13:55