You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式显示Odoo模型的字段名?(以res.partner为例)

嘿,要以编程方式列出Odoo里res.partner模型的字段名,我给你分享几个常用的实用方法,覆盖不同场景:

方法1:在Odoo模块代码中直接调用ORM

如果你正在开发自定义模块,直接在代码里通过Odoo的ORM就能轻松获取字段列表:

from odoo import models, api

class CustomUtility(models.Model):
    _name = 'custom.utility'

    @api.model
    def fetch_partner_fields(self):
        # 获取res.partner模型的环境对象
        partner_env = self.env['res.partner']
        # 调用fields_get()获取字段元数据字典
        fields_metadata = partner_env.fields_get()
        # 提取所有字段名
        field_names = list(fields_metadata.keys())
        # 可以直接返回或者做后续处理
        return field_names

调用这个方法就能拿到res.partner的所有字段名,包括系统自带和你自定义添加的字段。如果需要包括那些隐藏字段,给fields_get()加个参数就行:partner_env.fields_get(all_fields=True)。

方法2:用Odoo Shell快速验证

不想写模块?直接用Odoo自带的shell工具更高效,终端里执行:

odoo-shell -d 你的数据库名称

进入shell环境后,执行以下代码:

# 获取所有字段名并打印
partner_field_list = list(self.env['res.partner'].fields_get().keys())
print(partner_field_list)

几秒钟就能看到结果,非常适合快速调试或者临时查询。

方法3:通过XML-RPC从外部程序调用

如果要在Odoo系统外的脚本里获取字段名,用XML-RPC远程调用是个不错的选择:

import xmlrpc.client

# 配置连接信息
odoo_url = 'http://localhost:8069'
database_name = '你的数据库名称'
user_name = 'admin'
user_password = '你的管理员密码'

# 第一步:认证获取用户ID
common_proxy = xmlrpc.client.ServerProxy(f'{odoo_url}/xmlrpc/2/common')
user_id = common_proxy.authenticate(database_name, user_name, user_password, {})

if user_id:
    # 第二步:调用模型方法
    models_proxy = xmlrpc.client.ServerProxy(f'{odoo_url}/xmlrpc/2/object')
    # 获取字段元数据,attributes传空列表表示获取所有属性
    fields_info = models_proxy.execute_kw(
        database_name, user_id, user_password,
        'res.partner', 'fields_get',
        [], {'attributes': []}
    )
    # 提取字段名
    field_names = list(fields_info.keys())
    print(field_names)
else:
    print("认证失败,请检查账号、密码或数据库名称是否正确")

这个脚本可以独立运行,适合和其他系统做集成时获取Odoo的字段信息。

内容的提问来源于stack exchange,提问作者Billal BEGUERADJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:10:27