Skip to main content
 首页 » 编程设计

python之获取 OpenERP 中字段的标签名称

2025年05月04日13jillzhang

如何获取任何模型中字段的标签名称?

例如这样写:

obj = self.read(cr,uid,ids)[0] 

它将获取字段名称(技术名称,或数据库列名称)及其在给定记录中的值的字典。

所以例如输出将是这样的:

{'field1': 10, 'field2': 'hello', 'field3': 3.56} 

但是它不返回字段标签,我也不能从这里访问它,因为这里的字段名称只是一个字符串。

假设上面提到的这些字段:

_columns = { 
    'field1': fields.integer('First Field'), 
    'field2': fields.char('Second Field', size=128), 
    'field3': fields.float('Third Field'), 
} 

那我怎么能得到这个呢(我知道准确的输出是不可能的,因为标签不是关键,但我只是展示它以更好地理解问题):

{'First Field': 10, 'Second Field': 'hello', 'Third Field': 3.56} 

所以我认为检索标签的代码可能看起来像这样:

for k, v in obj.iteritems(): 
    print k.label 

但是没有这个属性。在 fields.py 文件中,我在大多数字段类型中看到 string 命名属性用作标签的输入,它具有默认输入 string='unknown',但我没有了解如何在遍历模型中的所有字段时检索它。

有人知道怎么做吗?

附言为什么我需要这个?我需要找到值满足特定条件的字段,然后在其他表中写入该字段标签。我可以写列名称,但普通用户需要查看该数据,因此他们需要了解该字段的含义,这就是我需要检索字段标签的原因。

请您参考如下方法:

有两个表可以使用 ir.model 和 ir.model.fields。在第二个上,您将通过使用字段“名称”获得“标签”。

所以搜索具有特定模型的字段会得到标签。 :)

如有更多问题,请提问 :)

编辑:一个例子可以是 sale.order,如果我想要 m2o 关系字段的所有标签与 res.partner

... 
model_obj = self.pool.get('ir.model') 
imf_obj = self.pool.get('ir.model.fields') 
field_label_list = [] 
model_id = model_obj.search(cr, uid, [('model','=','sale.order')], context=context) 
if model_id: 
    field_ids = imf_obj.search(cr, uid, [('model_id','=',model_id[0]),('ttype','=','many2one'),('relation','=','res.partner')], context=context) 
    if field_ids: 
        for field in imf_obj.browse(cr, uid, field_ids, context): 
            field_label_list.append(field.field_description) 
#do what you want with the list 
... 

第二次编辑:在类属性 _columns 处,您将拥有所有字段。你想要的属性是 string

for field in self._columns.itervalues(): 
    print field.string