获取OpenERP中字段的标签名称

1 投票
3 回答
3840 浏览
提问于 2025-04-17 23:07

我怎么才能获取任何模型中字段的标签名称呢?

比如写这个:

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',但我不明白在遍历模型中的所有字段时,怎么才能获取到这个值。

有人知道怎么做吗?

附言:我为什么需要这个?我需要找到那些值满足特定条件的字段,然后把这个字段的标签写到另一个表里。我可以写列名,但普通用户需要看到这些数据,所以他们需要理解这个字段的意思,这就是我需要获取字段标签的原因。

3 个回答

2

这样做:

self.fields_get('fieldname')

举个例子:

self.fields_get('phonenumber')

输出结果将是:

{'phonenumber': {'change_default': False, 'string': u'Phone', 'searchable': True, 'required': False, 'manual': False, 'readonly': False, 'depends': (), 'company_dependent': False, 'sortable': True, 'translate': False, 'type': 'Float', 'store': True}}
2

你好,我觉得在Odoo 11版本中,这个任务会更简单一些。

只需要使用

._fields()

这样就能获取字段的标签了。

你可以在Odoo控制台中使用dir()来找到更多有用的功能。

希望这能帮到你。

谢谢。

7

你可以使用两个表,一个是 ir.model,另一个是 ir.model.fields。在第二个表里,你可以通过“name”这个字段来获取“标签”。

所以,想要找到某个模型的字段,就去找它们的标签吧。 :)

如果还有其他问题,随时问我哦。 :)

补充一下:比如说,如果我想要获取与 res.partner 相关的 sale.order 模型中的所有标签。

...
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

撰写回答