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 原创内容,未经允许禁止转发,违者必究其责任!
  • 相关阅读:
    EF支持的注解
    c#数组去重复超级简单
    终于开通博客了。
    理解C#中参数
    一般处理程序中session问题
    小菜的面试所感
    为IOS生成opencv framework时遇到的2个问题
    纯真IP地址数据库qqwry.dat解析
    scala纯函数式编程-排序算法实现
    跳跃列表原理和实现
  • 原文地址:https://www.cnblogs.com/fandx/p/15020859.html
Copyright © 2011-2022 走看看