回顾学习

之前有讲解过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. 无网络的win10电脑之间实现相互共享文档

    产生需求的原因: 之前做过在有网的情况下,两台win10的电脑怎么在不使用任何第三方软件的情况下实现两者之间的文件共享,但是在完成之后,我猛然间想到一种情况,那就是如果两台wiin10的电脑如果没有网 ...

  2. python django框架+vue.js前后端分离

    本文用于学习django+vue.js实现web前后端分离协作开发.以一个添加和删除数据库书籍应用为实例. django框架官方地址:https://www.djangoproject.com/ vu ...

  3. SpringBoot面试题 (史上最全、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  4. Error in invoking target 'mkldflags ntcontab.o nnfgt.o' of mkdefile '/u01/app/oracle/product/11.2.0

    rpm -ivh cpp-4.4.7-3.el6.x86 64.rpm  --nodeps  --force  (强制安装rpm包)

  5. Linux中测试网络命令

    ping IP -t 是持续性查看网络状态

  6. 面试侃集合 | DelayQueue篇

    面试官:好久不见啊,上次我们聊完了PriorityBlockingQueue,今天我们再来聊聊和它相关的DelayQueue吧. Hydra:就知道你前面肯定给我挖了坑,DelayQueue也是一个无 ...

  7. 对图数据库(Nebula)进行单元测试时的坑

    通过Nebula提供的Java Client完成代码开发后,使用JUnit对其进行单元测试,需要注意几点: 一.不确定性 1.Nebula创建图空间是异步实现的,Nebula将在下一个心跳周期内(默认 ...

  8. Excel对单元格设置上涨、下降箭头

    1.有以下学生成绩表,对期末考试设置上涨.下降箭头,体现考生成绩变动: 2.选中C2,"条件格式"-"管理规则"-"新建规则"-" ...

  9. 8、oracle密码过期设置

    8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...

  10. JPA事务中的异常最后不也抛出了,为什么没被catch到而导致回滚?

    上周,我们通过这篇文章<为什么catch了异常,但事务还是回滚了?>来解释了,之前test4为什么会回滚的原因. 但还是收到了很多没有理解的反馈,主要是根据前文给出的线索去跟踪,是获得到了 ...