首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何对一个字段的所有记录的所有值求和?(Odoo 13)

在Odoo 13中,要对一个字段的所有记录的所有值求和,可以使用Odoo的查询语言(QWeb)和Python编程来实现。

首先,需要创建一个新的模块或在现有模块中添加一个新的功能。在模块的models.py文件中,定义一个新的模型类,该类将与要进行求和操作的表格(模型)相关联。

代码语言:txt
复制
from odoo import models, fields, api

class MyModel(models.Model):
    _name = 'my.model'

    field_name = fields.Float(string='Field Name')

    @api.multi
    def compute_sum(self):
        sum = 0.0
        for record in self:
            sum += record.field_name
        return sum

在上述代码中,我们创建了一个名为MyModel的模型,并添加了一个名为field_name的浮点字段。然后,我们定义了一个名为compute_sum的方法,该方法将对field_name字段的所有记录的值进行求和。

接下来,在模块的视图文件中,可以添加一个按钮或菜单项,以便用户触发求和操作。例如,在模块的views.xml文件中,可以添加以下代码:

代码语言:txt
复制
<record id="view_my_model_form" model="ir.ui.view">
    <field name="name">my.model.form</field>
    <field name="model">my.model</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <button name="compute_sum" string="Compute Sum" type="object" class="oe_highlight"/>
            </header>
            <sheet>
                <!-- Add other fields here -->
            </sheet>
        </form>
    </field>
</record>

在上述代码中,我们在模型的表单视图中添加了一个按钮,该按钮的点击事件将触发compute_sum方法。

最后,需要在模块的菜单文件中定义一个菜单项,以便用户可以访问该功能。例如,在模块的menu.xml文件中,可以添加以下代码:

代码语言:txt
复制
<record id="menu_my_model" model="ir.ui.menu">
    <field name="name">My Model</field>
    <field name="sequence" eval="10"/>
    <field name="action" ref="action_my_model"/>
</record>

<record id="action_my_model" model="ir.actions.act_window">
    <field name="name">My Model</field>
    <field name="res_model">my.model</field>
    <field name="view_mode">tree,form</field>
</record>

在上述代码中,我们创建了一个名为"My Model"的菜单项,并将其与模型关联。用户可以通过点击菜单项来访问模型的列表视图和表单视图。

完成上述步骤后,重新加载模块并启动Odoo服务器。然后,您可以通过以下步骤来对字段的所有记录的所有值求和:

  1. 登录到Odoo系统。
  2. 导航到"My Model"菜单项。
  3. 在列表视图中,选择要进行求和操作的记录。
  4. 点击"Compute Sum"按钮。
  5. 在弹出的消息框中,将显示字段的所有记录的值的总和。

这样,您就可以通过自定义模块和方法来实现对一个字段的所有记录的所有值求和的功能。

请注意,以上代码示例仅为演示目的,并未经过完整测试。在实际使用中,可能需要根据具体需求进行适当的修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ODOO配置文件/etc/odoo.conf配置详解

Odoo是一个多租户系统:一个Odoo系统可以运行并服务于多个数据库实例。它也是高度可定制的,定制(从加载的模块开始)取决于“当前数据库”。 作为登录公司用户使用后端(web客户端)时,这不是问题:登录时可以选择数据库,然后加载自定义设置。 但是,对于没有绑定到数据库的未登录用户(门户、网站)来说,这是一个问题:Odoo需要知道应该使用哪个数据库来加载网站页面或执行操作。如果没有使用多租户,这不是问题,只有一个数据库可以使用,但是如果有多个数据库可以访问,Odoo需要一个规则来知道它应该使用哪一个。 这是--db filter的目的之一:它指定如何根据所请求的主机名(域)选择数据库。该值是一个正则表达式,可能包括动态注入的主机名(%h)或访问系统所通过的第一个子域(%d)。 对于生产中托管多个数据库的服务器,特别是在使用网站时,必须设置dbfilter,否则许多功能将无法正常工作。

02

MySQL数据查询select语句灵活使用详解

作者:刘金玉 数据库中对数据进行查询必须使用Select关键词。本期教程跟老刘一起对数据库查询的几种情况进行学习。 第一种:单表查询 语法结构: select 字段名称 from 表名称 或者如果我们要查询表的所以字段,就直接使用select * from 表名 这个语法即可,这里的星号*表示所有字段名称。 案例:查询用户表user的所有信息 Select * from user 第二种:带有条件筛选的单表查询 where 这个语法只是在select查询语句的最好加上一条where语句进行数据的进一步过滤。 语法结构:where 字段1 表达式符号 相应条件值 举例:查询姓名为刘金玉的用户信息 Select * from user where trueName='刘金玉' 这里要注意的是“刘金玉”为一个字符串,因此要加上单引号,在数据库查询语句中,我们之前强调过,如果字段类型为字符串类型(例如char、varchar、nchar、nvarchar、text等)就要在查询和录入的时候加上相应的单引号‘’ 第三种:多表查询 join 我们很多时候往往要多个表的数据举行查询,因为根据关系型数据库设计的特点,我们需要的各个字段的数据往往分布于各个不同的数据表内。虽然在数据库中我们也可以采用where语句进行关键表的字段,但是这样做有很多弊端:一是条件语句不清晰,二是查询效率降低。因此,我们引出了join这个关键词。 Join有三种类型: left join 左连接 (默认的join就是left join) right join 右连接 inner join 内连接 语法结构: Select * from 表1 left/right/inner join 表2 on 表1.字段=表2.字段 举例:关联用户表和新闻表,关联字段为userid Select * from user left join news on user.userid= news. userid 根据这样说表关联,就可以显示文章的作者信息啦!当然,我们也可以采用给表取别名的方式关联。 Select * from user a left join news b on a.userid= b. userid 在使用join关键词进行关联的时候,一定要注意的是主表是哪个,这个跟现实结果记录数有关系。最好结合老刘的《零基础数据库教程》视频学习,注意观察一下不同的使用,得到的不同表关联结果。以下简单说明一下: A left join B 就是A为主表 A right join B 就是B为主表 A inner join B 就是取两张表的公共部分 副表在这里只是根据关键词对主表进行匹配,可能会被多次匹配,这要看数据表设计时候的表关系。 第四种:过滤相同列数据 distinct 如果我们得到的查询结果中有相同的数据行,我们可以通过distinct关键词进行过滤。 语法结构:select distinct 字段 from 表 没错,只需要在查询select关键词后加上distinct关键词即可。 举例:查询用户表一共有哪些用户昵称。 Select distinct nickname from user 第五种:数据排序order by 我们很多时候都是要将查询后的数据进行排序的,按照我们查询的指定字段为主关键词和次要关键词进行排序,这个时候,我们需要使用order by这个重要关键词。这个关键词往往用在查询语句的最后。 Order by 往往结合asc和desc这两个关键词,其中asc表示升序,desc表示降序。 语法结构: Select 字段 from 表 『where语句』 order by 字段1 asc/desc, 字段2 asc/desc... 使用案例:查询用户表所有信息,并按照用户编号进行升序排序。 Select * from user order by userid asc 其实在这个语句中,我们也可以省略asc关键词,因为order by 默认是以升序作为排序规则的。所以这个语句,我们也可以写成: Select * from user order by userid 第六种:数据记录显示limit 我们很多使用数据库的人员中,很多人都是做软件来发的,因此limit这个关键词就非常实用了,因为我们可以结合这个关键词,为我们的软件查询出来的数据记录结果做一个分页功能。limit这个关键词往往用在查询语句的最后。 语法结构: Select 字段 from 表 [where语句] [order by语句] [limit语句] 举例:获取用户表的前十条记录 Select * from user limit 10 获取用户表的第11~20条记录 Select * from user limit 10,20 第七种:聚合函数 sum count等

01
领券