odoo开发笔记--模型字段compute用法
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用法的更多相关文章
- odoo开发笔记 -- 模型字段定义中设置默认值
例如: company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env['res ...
- odoo开发笔记--模型中常用的方法
create方法在数据表中插入一条记录(或新建一个对象的resource)格式:def create(self,cr,uid,vals,context={})参数:vals:待新建记录的字段值,是一个 ...
- odoo开发笔记 -- 模型一对多tree视图弹窗效果实现
实现效果参考: 1. 开发者模式 -- 设置 -- 工作流 -- 编辑 -- 添加项目 2. 会计模块 -- 管理 -- 付款条款 -- 编辑/创建 实现方式,很简单.只要视图界面写个一对多关联字段就 ...
- odoo开发笔记 -- 用户字段值,默认给当前登录用户
场景描述: 在一些视图下,当系统用户创建某条记录的时候,需要给某个用户字段设置默认值,即:默认值为系统的当前登录用户,如何实现? 处理方式: 在定义模型的时候,给该字段赋值就可以: operator_ ...
- odoo开发笔记 -- 模型后台方法返回前端form视图和tree视图的写法
待补充: 参考:工作单跳转到通关清单 --form(一对一) 工作单跳转到报关单列表 --tree (一对多)
- odoo开发笔记 -- 模型(类)继承的几种机制
1. 类继承 2. 原型继承 3. 委托继承 待完善 https://www.cnblogs.com/chenshuquan/p/10523626.html
- odoo开发笔记--日期or时间字段给定默认值
开发中经常有这样的场景,需要给某个日期或者时间的字段默认值: 例如: 日期,默认今天 时间,默认当前时间 可以在odoo模型定义中进行设置, 如下样例提供参考: test_data = fields. ...
- odoo开发笔记 -- div标签代替odoo button写法
odoo开发笔记 -- div标签代替odoo button写法 并调用自定义js <footer> <div id="confirm_request_cloud_repo ...
- odoo开发笔记 -- 搜索视图继承扩展
odoo开发笔记 -- 搜索视图继承扩展
随机推荐
- vue 开发系列(三) vue 组件开发
概要 vue 的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比如我们在平台中封装了自己的附件控件,输入控件等. 组件的开发 在vue 中一个组件,就是一个独立的.vue 文件 ...
- Arbiter
from 2015-EDCAV-Problems encountered in various arbitration techniques used in NOC router-A survey ...
- function类型(c++11)
1.c++五大可调用的对象 可调用的对象常常作为泛型算法的实参 1)函数 2)函数指针 函数名其实也是函数指针,只不过函数名是一个常量指针,它的值不能改变,只能指向该函数,不能改变它的值让它指向别的函 ...
- 第36-37 Tomcat & SVN
1. Tomcat简介 tomcat是一个web服务器,类似nginx,apache的http nginx,http只能处理html等静态文件(jpg) 网页分为静态网页(以.html或者.htm结尾 ...
- java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory的解决办法
Tomcat7早就出来正式版,但是一直都没有用过,尤其是针对于我还一直在用Myeclipse6.5的人来说,它在配置tomcat的时候没有tomcat7的选项,所以就报了错误信息. java.lang ...
- 第23章:MongoDB-聚合操作--聚合命令
①count() 范例:统计students表中的数据量 db.students.count(); 范例:模糊查询 db.students.count("name":/张/i); ...
- windows访问ubuntu的文件
前提:windows电脑和ubuntu电脑要工作在同一个网段! 1.先要安装Samba sudo apt-get install samba openssh-server 2.编译Samba配置文件 ...
- 好文推荐系列---------(4)使用Yeoman自动构建Ember项目
好文原文地址:http://segmentfault.com/a/1190000000368881 我决定学习前端开发的效率工具Yeoman.本文将首先介绍Yeoman的基本情况,接着我们会使用Yeo ...
- TCP、UDP之三次握手四次挥手
1. http协议的简介 HTTP,HyperText Transfer Protocol.超文本传输协议,是互联网上应用最为广泛的一种网络协议.基于TCP的协议,HTTP是一个客户端和服务器端请求和 ...
- python advanced programming ( II )
面向对象编程 简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.数据封装.继承和多态是面向对象的三大特点. 在Python中,所有数据类型都可以视为对 ...