zoukankan      html  css  js  c++  java
  • 如何在Odoo创建新数据的时候添加自己的方法

    相信有一些小伙伴在使用odoo的时候,需要在创建数据的同时给一些数据自动赋值,虽然在使用onchange方法也基本可以实现需求,但是总是在一些特色的想法的onchange是不能满足需求的。

    odoo自带的create方法是默认创建数据模型的方法,我们需要如果我们修改他就直接重写它的方法即可。

    直接上栗子

    • 先简单创建一个模型(这步学了odoo基本框架应该都懂)。
    class FandxStock(models.Model):
        _name = "fandx.stock"
    
        name = fields.Char("商品名称")
        nums = fields.Integer("数量")
    
    • 简单说个想法,当创建stock的时候,如果数量>10就在name的后面加上一些字符串。
    class FandxStock(models.Model):
        _name = "fandx.stock"
    
        name = fields.Char("商品名称")
        nums = fields.Integer("数量")
        
        @api.model_create_multi
        def create(self, vals_list):
            # 创建数据之前做的操作
            # ....
            # 调用父级方法创建数据对象
            fandx_stock_instance = super(FandxStock, self).create(vals_list)
            # 创建数据之后做的操作
            for instance in fandx_stock_instance:
                # 因为这里创建的是数据集对象,所以我们要循环取出所有数据进行处理
                # 如果想创建单个数据使用@api.model
                if instance.nums > 10:
                    # 这是直接调用属性赋值会自动调用write方法来重写数据
                    instance.name = "fandx" + instance.name
            
            # 最后注意一定要返回创建的对象
            return fandx_stock_instance
            
    

    总结

    1. odoo可以重写create来重写创建方法,同时也可以重写其他方法实现别的操作
      1. search() - 查询
      2. write() - 修改
      3. unlink() - 删除
    2. 使用的时候一定要使用@api.model装饰器,具体可以去看父类是否使用了装饰器,比如unlink就不需要使用@api.model装饰器
    3. @api.model装饰器是一条数据,而@api.model_create_multi是创建多条数据


    本文 FANDX 原创内容,未经允许禁止转发,违者必究其责任!
  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/fandx/p/15020859.html
Copyright © 2011-2022 走看看