回顾学习

之前有讲解过display_name是怎么由来的,odoo会去取_rec_name的值,会将_rec_name的值赋值给display_name。

class FandxProduct(model.Model):
_inhert = "product.product"
_rec_name = 'fandx_name' fandx_name = fields.Char(string='产品名称')

这里我们会发现_rec_name是无效的,之前我们也讲解过需要重写name_get才能会使用继承后重写的_rec_name

class FandxProduct(model.Model):
_inhert = "product.product"
_rec_name = 'fandx_name' fandx_name = fields.Char(string='产品名称') def name_get(self):
return super(GoodsSkus, self).name_get()

这里惊喜的发现display_name的取值还是name的值。既然如此那么只能去在深入研究了display_name是怎么来的了。

先研究一下Basemodel中display_name字段的由来

# display_name的取值决定与_compute_display_name的方法
# 1. _setup_base
# 2. _add_magic_fields
@api.model
def _add_magic_fields(self):
# ....
# 重点关注,display_name原来是根据compute计算字段而来的
add('display_name', fields.Char(string='Display Name', automatic=True,
compute='_compute_display_name'))
#.... @api.depends(lambda self: (self._rec_name,) if self._rec_name else ())
def _compute_display_name(self):
names = dict(self.name_get())
for record in self:
record.display_name = names.get(record.id, False)

这么一看没有半点毛病,还是取值name_get(),那么只有一种可能了name_get()被重写了。

Product.product中的name_get()

查看了源码果不其然,name_get的方法被重写了,那么久研究一下他为什么没有走_rec_name


def name_get(self):
# ....
# 这里发现,product直接取值product.name,并没有取_rec_name,怪不得怎么重写rec_name都不会生效
name = variant and "%s (%s)" % (product.name, variant) or product.name
# ....

解决问题

Product的display_name为什么没有取值_rec_name的原因是找到了,那么对症下药就可以了,还是重写name_get(),但是返回的格式要注意name_get() -> [(id, name), ...]

class FandxProduct(model.Model):
_inhert = "product.product"
_rec_name = 'fandx_name' fandx_name = fields.Char(string='产品名称') def name_get(self):
# 这里也可以根据自己的想法自由组建自己的display_name值的内容
for record in self:
name = record._rec_name
add_data = (record.id, name)
res.append(add_data)
return res

总结

  • 其实说到底还是使用了name_get解决了问题,但是更加细致的了解了display_name的由来。
  • 其实我们发现问题,耐心的去查看源码基本可以解决90%以上的问题。
  • 有问题可以下方留言。

每日精进:慢慢建立自己的原则,做一个有原则的人。

如何修改product.product的display_name的显示,解决_rec_name失效的问题的更多相关文章

  1. 修改配置文件matplotlibrc,让Matplotlib显示中文

    matplotlib默认不支持中文显示,网上的解决办法有好多种,但是大多数都是通过在代码中指定字体,虽然也能实现,但是多出那么几行代码让人觉得很恶心. 本文介绍一种通过修改配置文件matplotlib ...

  2. 织梦DEDECMS更换目录后页面内的图片和缩略图无法显示解决方法

    http://www.win8f.com/seoyouhua/6609.html 很多人碰到织梦更换目录后内容图片和缩略图无法显示的问题,在此,慧鸿网络特地搜集整理了一篇关于织梦出现缩略图和内容无法显 ...

  3. (原创)Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)

    « CloudStack+XenServer详细部署方案(10):高级网络功能应用 (总结)CentOS Linux 5.x在GPT分区不能引导的解决方法 » 2013-1 11 (原创)Linux下 ...

  4. ECstore报表不显示解决

    最近研究ECSTORE发现后台报表显示空白,Google了一下发现N多统一的做法,直接往表里插几条数据.呵呵,更深入一点 1.要显示报表功能首先要确保已经配置好contab的定时任务,定时任务能够执行 ...

  5. 重装ArchLinux后修改GRUB配置不生效问题的解决

    重装ArchLinux后修改GRUB配置不生效问题的解决 mount指令看一下挂载,或者vim /etc/fstab看一下有没有/boot,看看fstab是不是没写进去.... 我特喵昨天重装完Arc ...

  6. yoast breadcrumb面包屑导航修改去掉product

    前面我们创建了wordpress添加post_type自定义文章类型和调用自定义post_type文章,现在yoast 面包屑导航出现home >product >分类1,想要把produ ...

  7. 关于wordpress在修改固定链接后,总显示Not Found的问题

    参考来源: http://chinablog.blog.51cto.com/276793/280278 一.问题背景 使用wordpress搭建网站,为了让文章URL看起来漂亮一点,wordpress ...

  8. 修改linux命令行提示符路径显示

    命令显示行太长,影响观感,这样需要修改,具体方法: 1. 修改 ~/.bashrc,在最后一行添加: export PS1='[\u@\h\W]$' 其中\u是当前用户名,\h是当前主机名,\w显示当 ...

  9. jquery uploadify修改上传的文件名和显示

    如果觉得看文章太麻烦,可以直接看参考:http://stackoverflow.com/questions/7707687/jquery-uploadify-change-file-name-as-i ...

随机推荐

  1. centos 7 显示系统执行的进程

    命令:ps -aux ps -aux | more USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 1911 ...

  2. jQuery04

    jQuery内容总结: 1.既然是一个js库,使用之前就要引入js库,是一个.js文件,版本是1.8.3: 2.写一个jQuery页面加载函数(注意与js页面加载函数的区别): $(function( ...

  3. 开关电源(1)之BUCK降压变换器工作原理及Multisim实例仿真

    开关电源(Switching  Mode  Power  Supply)即开关稳压电源,是相对于线性稳压电源的一种的新型稳压电源电路,它通过对输出电压实时监测并动态控制开关管导通与断开的时间比值来稳定 ...

  4. GetModuleFileName函数的用法

    函数的功能 获取exe可执行文件的绝对路径. 用法 通过获取到exe的路径,可以获取到程序路径下(父路径或者子路径)的一些其它文件路径. 函数原型 DWORD WINAPI GetModuleFile ...

  5. js笔记4

    1.js数据类型分析 (1)基础类型:string.number.boolean.null.undefined (2)引用类型:object-->json.array... 2.点运算  xxx ...

  6. Gitlab 定时备份

    要求 1.为了能够备份和恢复,请确保你的系统上安装了Rsync #Debian/Ubauntu sudo apt-get install rsync # RHEL/Centos sudo yum in ...

  7. 31、服务器磁盘、内存、cpu使用率监控

    31.1.监控磁盘: #!/bin/sh diskspace="`df -hT`" IFS="\n" disk_value="80" ech ...

  8. 27、Tomcat服务的安装与配置

    服务器名称 ip地址 slave-node1 172.16.1.91 27.1. Tomcat简介: Tomcat是Apache软件基金会(Apache Software Foundation)的Ja ...

  9. 18、mysql读写分离实现的方法

    18.1.mysql读写分离实现的方法: 1.通过程序实现读写分离: php和java程序实现读写分离(性能,效率最佳,推荐); php和java程序都可以通过设置多个连接文件轻松实现对数据库的读写分 ...

  10. 非静态的字段、方法或属性“System.Web.UI.Page.ClientScript.get”要求对象引用

    解决Response.Write("<script>alert('修改失败,请稍后再试!');</script>");布局错误的问题 在后台CS代码(不是C ...