回顾学习

之前有讲解过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. 总结springboot开启mybatis驼峰命名自动映射的三种方式

    方式一:通过springboot的配置文件application.yml mybatis: configuration: map-underscore-to-camel-case: true 此方式是 ...

  2. java中的关键字volatile

    1.volatile简介 volatile作为java中的关键词之一,用以声明变量的值可能随时会被别的线程修改,使用volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值 ...

  3. Python小白的数学建模课-09 微分方程模型

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...

  4. 消失之物(背包DP)(容斥或分治)

    容斥做法: 首先n^2搞出f[i][j]第i个物品,j体积的方案数. 去除每个物品贡献: 设个g[i][j]表示当i不选,j体积方案数(注意不是此时的范围相对于全局,而不是1---i) 那么我们用到一 ...

  5. 【题解】Luogu p3047 [USACO12FEB]附近的牛Nearby Cows 树型dp

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

  6. 【贪心】8.29题解-cut

    cut 题目描述 出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块. 对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切割下去要花不同 ...

  7. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  8. DDoS攻击的工具介绍

    1.低轨道离子加农炮(LOIC) 1.1 什么是低轨道离子加农炮(LOIC)? 低轨道离子加农炮是通常用于发起DoS和DDoS攻击的工具.它最初是由Praetox Technology作为网络压力测试 ...

  9. Web自动化之iframe切换

    一.如何判断元素是否在iframe中 选中要操作的元素,通过下方的父节点查看是否存在iframe,存在则元素在iframe,需要切换至iframe中进行元素的操作 二.iframe切换方式一 1.方式 ...

  10. 通过RenderDoc真机抓取数据来落地验证和解决特效性能的问题

    前言 需求是来自于我在为我司的一个线上RPG游戏做特效的性能优化的过程中,需要验证对特效的一个改动是否能够提高性能,当然这个改动是在不影响美术效果的前提. 特效性能问题 技能特效 主角的一个大招(技能 ...