And*_*ius 1 python label openerp
如何获取任何模型中字段的标签名称?
例如写这个:
obj = self.read(cr,uid,ids)[0]
Run Code Online (Sandbox Code Playgroud)
它将获取字段名称(技术名称或数据库列名称)及其在给定记录中的值的字典.
所以例如输出将是这样的:
{'field1': 10, 'field2': 'hello', 'field3': 3.56}
Run Code Online (Sandbox Code Playgroud)
但它不会返回字段标签,我也无法从这里访问它,因为这里的字段名称只是一个字符串.
所以,请说上面提到的这些字段:
_columns = {
'field1': fields.integer('First Field'),
'field2': fields.char('Second Field', size=128),
'field3': fields.float('Third Field'),
}
Run Code Online (Sandbox Code Playgroud)
然后我怎么能得到这个(我知道确切的输出是不可能的,因为标签不是关键,但我只是为了更好地理解问题而展示它):
{'First Field': 10, 'Second Field': 'hello', 'Third Field': 3.56}
Run Code Online (Sandbox Code Playgroud)
所以我认为检索标签的代码看起来像这样:
for k, v in obj.iteritems():
print k.label
Run Code Online (Sandbox Code Playgroud)
但是没有这样的属性.在fields.py文件中,我在大多数字段类型中看到,string命名属性被用作标签的输入,标签具有默认输入string='unknown',但我不知道如何在迭代模型中的所有字段时检索它.
谁知道怎么做?
PS为什么我需要这个?我需要查找其值满足特定条件的字段,然后在其他表中写入该字段标签.我可以编写列名,但是简单的用户需要查看该数据,因此他们需要了解该字段的含义,这就是我需要检索字段标签的原因.
有两个表,你可以使用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
...
Run Code Online (Sandbox Code Playgroud)
第二次编辑:在class属性中,_columns您将拥有所有字段.你想要的属性是string
for field in self._columns.itervalues():
print field.string
Run Code Online (Sandbox Code Playgroud)