如何获取任何模型中字段的标签名称?
例如这样写:
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
