获取OpenERP中字段的标签名称
我怎么才能获取任何模型中字段的标签名称呢?
比如写这个:
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 个回答
这样做:
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}}
你好,我觉得在Odoo 11版本中,这个任务会更简单一些。
只需要使用
._fields()
这样就能获取字段的标签了。
你可以在Odoo控制台中使用dir()来找到更多有用的功能。
希望这能帮到你。
谢谢。
你可以使用两个表,一个是 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