• odoo12 修行基础篇之 添加字段 (一)


      本人刚刚接触odoo12,大概有2个多月的时间,这两天有点时间,就集中写下博客。

      本来是打算整理成笔记,想到这段时间的开发经历,着实感觉网上有关odoo的资料太少,学习资料也不多,既然与odoo有缘,想系统的整理下这段时间的心得体会,与有缘人分享,也算是响应了IT行业的宗旨了。

      废话少说,展开正题:

      odoo基础教程,比如odoo12的:https://alanhou.org/odoo-12-development/

      这个系列教程对我影响很大,在此,对大神Alan Hou表示衷心感谢

      我主要是想通过简单的例子,对一些odoo开发中常用的技术进行说明:

      第一篇要说的是添加字段:这也是我接触odoo12最开始的工作。

      准备工作:

      运行odoo,安装销售、采购、联系人三个模块,用于演示添加字段。

    在视图中添加字段:

      

      以上是原销售订单form页面,我想在``客户``字段下增加``销售员``字段(从联系人直接关联)(sale.order是有的,用于演示)。

    # -*- coding:utf-8 -*-
    """销售模块扩展"""
    
    from odoo import fields, models
    
    # 销售模块扩展
    class SaleOrderExtension(models.Model):
        """销售模块扩展"""
        _inherit = 'sale.order'
    # 销售员 x_salesman
    = fields.Many2one( 'res.users', string='销售员', related='partner_id.user_id' )

      在models目录中创建sale_order_extension.py文件

      在models/__init__.py文件中引用该文件

      related可以通过当前类的某个关联字段,关联到该字段所关联模型中的其它字段。

      比如上述就是通过sale.order模型中的partner_id字段,关联到res.partner中的user_id字段

      注意的是:x_salesman的关联模型是res.users,与user_id的字段属性是一致的,否则会报如下错误:

    /home/sam/odoo12/odoo/odoo/fields.py(2139)convert_to_cache()
    raise ValueError("Wrong value for %s: %r" % (self, value))

      就是因为我把res.users搞成了res.partner

    x_salesman = fields.Many2one(
            'res.partner',
            string='销售员',
            related='partner_id.user_id'
        )

      还有可能遇到这样的错误:

    TypeError: Model 'sale.order' does not exist in registry.

      这是由于在__manifest__.py文件中的'depends'中没有引入对应模块导致的:

    'depends': ['base',],

      修改如下:

    'depends': ['base', 'sale',],

      这个'sale'索引用的是目录名,因为添加字段所继承的sale.order模型就在sale目录下:

      / home / sam / odoo12 / odoo / addons / sale / models / sale.py

      在views目录中创建sale_order_extension.xml文件,代码如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <odoo>
    
        <record id="view_order_form_modify" model="ir.ui.view">
            <field name="name">view.order.form.modify</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_order_form"/>
            <field name="arch" type="xml">
                <!-- 增加``销售员``字段 -->
                <xpath expr="//group/group/field[@name='partner_id']"
                       position="after"
                >
                    <field name="x_salesman" />
                </xpath>
            </field>
        </record>
    
    </odoo>

      对于xml文件的修改,可能报如下错误:

    元素 '<xpath expr="//group/div/field[@name='partner_id']">' 在母级视图中没有找到

      注意我把group修改成了div,这属于xpath写错了

      还有可能也报类似的问题,但是问题原因并不是xpath,而是继承的视图的外部ID不对

      如我把外部ID修改成如下,也会报类似错误:

    <field name="inherit_id" ref="base.res_partner_kanban_view"/>
    元素 '<xpath expr="//group/group/field[@name='partner_id']">' 在母级视图中没有找到

      关于找外部ID的方法,有几个技巧可以分享给大家:

      找form、tree、kanban等odoo自带类型,可以使用如下方式:

      开启开发者模式,点击右上角的debug图标

      选择下拉菜单中的相关项,具体可自己试验

      可以在弹出的页面中找到外部ID

      找按钮的外部ID,可以使用如下方式:

      打开谷歌浏览器:

      右键点击一个按钮,选择检查

      红框圈出的就是这个按钮对应的外部ID,这个在添加按钮权限时,非常好用。

      可以看看字段添加后的效果,不可编辑,如果在联系人中修改了销售员字段,在选择客户时会自动带出,并显示在页面中。

    在列表中添加字段:

       在列表中添加字段:

      我想在Quotation Date后面增加创建人,使用系统默认字段create_uid,只添加xml就可以了

      在上述的xml文件中,补充如下代码:

    <record id="view_order_tree_modify" model="ir.ui.view">
            <field name="name">view.order.form.modify</field>
            <field name="model">sale.order</field>
            <field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding"/>
            <field name="arch" type="xml">
                <!-- 增加``创建人``字段 -->
                <xpath expr="//field[@name='date_order']"
                       position="after"
                >
                    <field name="create_uid" />
                </xpath>
            </field>
     </record>

      其它的odoo自带的添加字段的方式与上述相同

      需要注意的就是外部ID的引用,以及xpath的使用

      有时可能会遇到修改无效也不报错的情况,很有可能是文中有多个相同字段,你的xpath并没有选中你想要修改的字段。

      这在TAB页中和明细中添加字段时会经常遇到。

      上述的基本方法能够适用大部分的情况了,后一篇补充下在明细中添加计算字段的情况。

     

  • 相关阅读:
    zookeeper安装
    Xmemcached的FAQ和性能调整建议
    memcache命令
    xmemcached的使用
    从硬币游戏学习敏捷开发
    memcached安装
    系统负载能力浅析
    kubernetes1.18安装metrics-server服务
    启动docker run 报错:iptables No chain/target/match by that name
    docker容器内apt更换国内阿里源
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/10968113.html
Copyright © 2020-2023  润新知