compute属性,实现的主要功能是,前端界面选择某个字段的时候,指定与该字段关联的其他字段可以关联,并联动的显示。

可以和inverse属性同时使用,不加inverse属性的话,前端界面的显示效果只是只读样式,不能编辑修改;而加上inverse属性时候,相应的关联字段可以修改,

但是,修改后,实际上修改的是原表;即会将原表的数据级联更改。

class HelloJesson(models.Model):
_name = 'test.cus_goods_list'
# rec_name = 'goods_name'
_inherit = ['mail.thread', 'ir.needaction_mixin']
_description = 'Test Goods List' goods_name = fields.Char(compute='_generate_about_name', string="goods name", inverse='_write_stage_fold')
cus_goods_tariff_id = fields.Many2one(comodel_name="other_yourself_model.cus_goods_tariff", string="cus goods Code TS", required=False, ) @api.onchange('cus_goods_tariff_id')
def _generate_about_name(self):
"""根据当前cus_goods_tariff_id的变化 动态关联显示goods_name"""
for goods_list in self:
if goods_list.cus_goods_tariff_id:
goods_list.goods_name = goods_list.cus_goods_tariff_id.NameCN def _write_stage_fold(self):
""" inverse='_write_stage_fold' 增加可编辑功能 但是inverse会将原来表中的数据级联修改"""
for goods_list in self:
if goods_list.cus_goods_tariff_id:
goods_list.cus_goods_tariff_id.NameCN = self.goods_name

实现compute字段 前端可以编辑修改的方法有两种:

(1)我们可以在模型定义中,再单独添加一个字段g_name,然后该字段根据compute生成的那个字段good_name的值进行取值并赋值给g_name;

class HelloJesson(models.Model):
_name = 'test.cus_goods_list'
rec_name = 'g_name'
_inherit = ['mail.thread', 'ir.needaction_mixin']
_description = 'Test Goods List' g_name = fields.Char(string="goods name") # 商品名称
goods_name = fields.Char(compute='_generate_about_name', string="goods name", store=True) # 商品名称
cus_goods_tariff_id = fields.Many2one(comodel_name="other_yourself_model.cus_goods_tariff", string="cus goods Code TS", required=False, ) @api.onchange('goods_name')
def change_name(self):
"""由于compute字段前端无法编辑,定义新方法,ID改变生成商品名改变goods_name,再由goods_name的变化,触发赋值给g_name"""
for goods_list in self:
if goods_list.goods_name:
# goods_list.update({'name': goods_list.goods_name})
goods_list.g_name = goods_list.goods_name @api.depends('cus_goods_tariff_id')
def _generate_about_name(self):
"""根据cus_goods_tariff_id编码的变化 改变goods_name"""
for goods_list in self:
if goods_list.cus_goods_tariff_id:
goods_list.goods_name = goods_list.cus_goods_tariff_id.NameCN

(2)方式二,可以直接将compute属性去掉,装饰器使用@api.onchange,可以直接实现前端相关字段动态生成,并且可以编辑的效果。

odoo开发笔记--模型字段compute用法的更多相关文章

  1. odoo开发笔记 -- 模型字段定义中设置默认值

    例如: company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env['res ...

  2. odoo开发笔记--模型中常用的方法

    create方法在数据表中插入一条记录(或新建一个对象的resource)格式:def create(self,cr,uid,vals,context={})参数:vals:待新建记录的字段值,是一个 ...

  3. odoo开发笔记 -- 模型一对多tree视图弹窗效果实现

    实现效果参考: 1. 开发者模式 -- 设置 -- 工作流 -- 编辑 -- 添加项目 2. 会计模块 -- 管理 -- 付款条款 -- 编辑/创建 实现方式,很简单.只要视图界面写个一对多关联字段就 ...

  4. odoo开发笔记 -- 用户字段值,默认给当前登录用户

    场景描述: 在一些视图下,当系统用户创建某条记录的时候,需要给某个用户字段设置默认值,即:默认值为系统的当前登录用户,如何实现? 处理方式: 在定义模型的时候,给该字段赋值就可以: operator_ ...

  5. odoo开发笔记 -- 模型后台方法返回前端form视图和tree视图的写法

    待补充: 参考:工作单跳转到通关清单 --form(一对一) 工作单跳转到报关单列表 --tree (一对多)

  6. odoo开发笔记 -- 模型(类)继承的几种机制

    1. 类继承 2. 原型继承 3. 委托继承 待完善 https://www.cnblogs.com/chenshuquan/p/10523626.html

  7. odoo开发笔记--日期or时间字段给定默认值

    开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...

  8. odoo开发笔记 -- div标签代替odoo button写法

    odoo开发笔记 -- div标签代替odoo button写法 并调用自定义js <footer> <div id="confirm_request_cloud_repo ...

  9. odoo开发笔记 -- 搜索视图继承扩展

    odoo开发笔记 -- 搜索视图继承扩展

随机推荐

  1. Echarts饼图显示模板

    图表类型,必要参数!如为空或不支持类型,则该系列数据不被显示.可选为: 'line'(折线图) | 'bar'(柱状图) | 'scatter'(散点图) | 'k'(K线图) 'pie'(饼图) | ...

  2. js监听键盘触发按钮事件,回车提交表单

    /*回车提交表单*/ $(document).keydown(function(event){ if(event.keyCode == 13){ //alert('你按下了Enter'); $(&qu ...

  3. MySQL 安装与使用(二)

    操作系统:CentOS release 5.10 (Final) MySQL版本:5.1.72-community 一.MySQL数据库简单迁移(备份与还原) 参考:http://dev.mysql. ...

  4. VS2013利用ajax访问不了json文件——VS2013配置webconfig识别json文件

    这两天用VS2013开发工具来访问json文件,老是报404文件,我根据网上来设置IIS添加MIME重启IIS和VS2013还是失败,无法访问json文件,但是奇怪的是可以访问txt文件 查询了很多方 ...

  5. 解决UITableView上的cell的重用

    1.通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决 //        static NSString *rankCellIndefier = @"rankC ...

  6. CountDownLatch同步辅助类

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  7. Java中方法重写和方法重载

     首先方法重写和方法重载是建立在Java的面向对象的继承和多态的特性基础上而出现的.至于面向对象的继承和多态的特性我就不在这里多说了.继承是指在一个父类的基础再创建一个子类,这样子类就拥有了父类的非私 ...

  8. ASP.NET Web API 框架研究 Controller创建过程与消息处理管道

    现在我们从代码角度来看下,从消息处理管道末尾是怎么创建出Controller实例的.消息处理管道末端是一个叫HttpRoutingDispatcher的处理器,其内部完成路由后 ,会把消息派送给其内部 ...

  9. 佛祖保佑,永不死机 - /etc/motd文件配置

    /etc/motd (message of to day:每日信息) 一.执行命令: cat <<EOT >/etc/motd _oo0oo_ (| -_- |) \ = / ___ ...

  10. 前端开发 - jQuery

    本节内容 一.jQuery概述 二.选择器 三.操作DOM 四.修改DOM结构 五.事件 六.动画 七.AJAX(待续) 八.扩展(待续) 一.jQuery概述 jQuery 是一个 JavaScri ...