odoo many2one,在视图显示什么?_rec_name
当我们定义了many2one的时候,是希望在另一张表里面选择我们制定好的可填范围。
那么选择的时候显示什么呢?
默认是显示name这个名字
具体可以看 odoo/models.py BaseModel 下有个函数
def name_get(self): """ name_get() -> [(id, name), ...] Returns a textual representation for the records in ``self``. By default this is the value of the ``display_name`` field. :return: list of pairs ``(id, text_repr)`` for each records :rtype: list(tuple) """ result = [] name = self._rec_name if name in self._fields: convert = self._fields[name].convert_to_display_name for record in self: result.append((record.id, convert(record[name], record))) else: for record in self: result.append((record.id, "%s,%s" % (record._name, record.id))) return result
如果你没定义name这个名字,就会显示的乱七八糟,如果你像显示的更复杂一些,也要复写这个方法
下面是返回class_name
当然你也可以继续改写

class labor_personnel_personnel_order_class(models.Model): _name = "labor_personnel.personnel_order_class" class_name = fields.Char() def name_get(self): # 重写函数,更改many2one显示值名字和指定返回ID result = [] for record in self: name = record.class_name # 实现修改显示值名字 result.append((record.id, name)) return result
随着学习,又发现了新方法,不用你重写name_get了。
本来odoo是自动返回name字段,如果没有,就返回模型名和模型ID,复写name_get,可以得到你想要的更复杂的东西。
如果只是返回一个字段,可以用_rec_name
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/16465832.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2018-07-11 selenium(七)expected_conditions EC