【零散技术】odoo tree 视图合计数值 & 底层视图定义文件RNG浅看

序言:时间是我们最宝贵的财富,珍惜手上的每个时分

 业务单据和 金钱/数字 息息相关,基本所有的单据都会涉及到 金额总计的问题,那么我们如何使列表视图上具备金额总计呢?

1.基础使用

金额总计字段需要满足以下条件

        1:python中定义的字段类型为Float /Integer/ Mentory

    amount_1 = fields.Monetary('金额')
    amount_2 = fields.Integer('金额')
    amount_3 = fields.Float('金额')

       2:xml中设定 属性 sum='xxx', 这个 xxx 是 鼠标悬停在合计数字时显示的 文字

<field name='amount_1' sum='合计金额'/>
<field name='amount_2' sum='合计金额'/>
<field name='amount_3' sum='合计金额'/>

 完成如上两步,即可在odoo的 tree视图中看到合计数据了。

2.代码浅窥

        这个sum 属性从哪里定义的?

        我们不妨看一下odoo 的base模块中的 rng文件:common.rng

        在 common.rng里,我们可以看到 field 的定义,其中 就包含了 attribute : sum

    <rng:define name="field">
        <rng:element name="field">
            <rng:attribute name="name" />
            <rng:ref name="overload"/>
            <rng:ref name="access_rights"/>
            <rng:ref name="modifiable"/>
            <rng:optional><rng:attribute name="domain_filter"/></rng:optional>
            <rng:optional><rng:attribute name="attrs"/></rng:optional>
            <rng:optional><rng:attribute name="class"/></rng:optional>
            <rng:optional><rng:attribute name="string"/></rng:optional>
            <rng:optional><rng:attribute name="completion"/></rng:optional>
            <rng:optional><rng:attribute name="width"/></rng:optional>
            <rng:optional><rng:attribute name="type"/></rng:optional>
            <rng:optional><rng:attribute name="ref"/></rng:optional>
            <rng:optional><rng:attribute name="eval"/></rng:optional>
            <rng:optional><rng:attribute name="search"/></rng:optional>
            <rng:optional><rng:attribute name="model"/></rng:optional>
            <rng:optional><rng:attribute name="use"/></rng:optional>
            <rng:optional><rng:attribute name="on_change"/></rng:optional>
            <rng:optional><rng:attribute name="domain"/></rng:optional>
            <rng:optional><rng:attribute name="filter_domain"/></rng:optional>
            <rng:optional><rng:attribute name="invisible"/></rng:optional>
            <rng:optional><rng:attribute name="password"/></rng:optional>
            <rng:optional><rng:attribute name="comparator"/></rng:optional>
            <rng:optional><rng:attribute name="sum"/></rng:optional>
            <rng:optional><rng:attribute name="bold"/></rng:optional>
            <rng:optional><rng:attribute name="avg"/></rng:optional>
            <rng:optional><rng:attribute name="select"/></rng:optional>
            <rng:optional><rng:attribute name="hierarchize"/></rng:optional>
            <rng:optional><rng:attribute name="expand"/></rng:optional>
            <rng:optional><rng:attribute name="group"/></rng:optional>
            <rng:optional><rng:attribute name="color"/></rng:optional>
            <rng:optional><rng:attribute name="groupby"/></rng:optional>
            <rng:optional><rng:attribute name="enable_counters"/></rng:optional>
            <rng:optional><rng:attribute name="limit"/></rng:optional>
            <rng:optional><rng:attribute name="operator"/></rng:optional>
            <rng:optional><rng:attribute name="colspan"/></rng:optional>
            <rng:optional><rng:attribute name="nolabel"/></rng:optional>
            <rng:optional><rng:attribute name="required"/></rng:optional>
            <rng:optional><rng:attribute name="readonly"/></rng:optional>
            <rng:optional><rng:attribute name="view_mode"/></rng:optional>
            <rng:optional><rng:attribute name="widget"/></rng:optional>
            <rng:optional><rng:attribute name="context"/></rng:optional>
            <rng:optional><rng:attribute name="states"/></rng:optional>
            <rng:optional><rng:attribute name="digits"/></rng:optional>
            <rng:optional><rng:attribute name="icon"/></rng:optional>
            <rng:optional><rng:attribute name="mode"/></rng:optional>
            <rng:optional><rng:attribute name="size"/></rng:optional>
            <rng:optional><rng:attribute name="filename"/></rng:optional>
            <rng:optional><rng:attribute name="height"/></rng:optional>
            <rng:optional><rng:attribute name="rowspan"/></rng:optional>
            <rng:optional><rng:attribute name="align"/></rng:optional>
            <rng:optional><rng:attribute name="selection"/></rng:optional>
            <rng:optional><rng:attribute name="default_focus"/></rng:optional>
            <rng:optional><rng:attribute name="filters"/></rng:optional>
            <rng:optional><rng:attribute name="statusbar_visible"/></rng:optional>
            <rng:optional><rng:attribute name="can_create" /></rng:optional>
            <rng:optional><rng:attribute name="can_write" /></rng:optional>
            <rng:optional><rng:attribute name="interval" /></rng:optional>
            <rng:optional><rng:attribute name="avatar_field" /></rng:optional>
            <rng:optional><rng:attribute name="write_model" /></rng:optional>
            <rng:optional><rng:attribute name="write_field" /></rng:optional>
            <rng:optional><rng:attribute name="text" /></rng:optional>
            <rng:optional><rng:attribute name="optional" /></rng:optional>
            <rng:optional><rng:attribute name="decoration-bf"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-it"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-danger"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-info"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-muted"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-primary"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-success"/></rng:optional>
            <rng:optional><rng:attribute name="decoration-warning"/></rng:optional>
            <rng:optional><rng:attribute name="kanban_view_ref" /></rng:optional>
            <rng:optional>
                <rng:attribute name="force_save">
                    <rng:choice>
                      <rng:value>1</rng:value>
                      <rng:value>0</rng:value>
                    </rng:choice>
                </rng:attribute>
            </rng:optional>
            <!-- Widget *static* options defined as an arbitrary JSON dict, with
                 widget-dependent parameters. To be ignored if widget/client does
                 not support them. -->
            <rng:optional><rng:attribute name="options"/></rng:optional>
            <rng:optional><rng:attribute name="placeholder"/></rng:optional>
            <rng:zeroOrMore>
                <rng:choice>
                    <rng:ref name="data"/>
                    <rng:ref name="field"/>
                    <rng:ref name="label"/>
                    <rng:ref name="separator"/>
                    <rng:ref name="xpath"/>
                    <rng:ref name="button"/>
                    <rng:ref name="group"/>
                    <rng:ref name="filter"/>
                    <rng:ref name="html"/>
                    <rng:element name="newline"><rng:empty/></rng:element>
                </rng:choice>
            </rng:zeroOrMore>
        </rng:element>
    </rng:define>

并且,我们不仅看到了sum的关键字,还看到了其他字段相关的定义。

至于rng 格式的属性如何对视图进行转换,以及合计数据的。我们下次在看。

随想

对于广大odoo爱好者/从业者来说,读一读源码是有利无害的,在我初次打开RNG文件时,真的有“会当凌绝顶,一览纵山小”的感慨:原来 odoo 视图的定义如此丰富,并且还有一些没见过/用过的属性。

再次感叹,odoo的强大。

odoo开发部署实施.

微信: _ro_cd

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值