如何获取任何模型中字段的标签名称?
例如写下这个:
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'
,但我不知道如何在迭代时检索它模型中的所有字段。
任何人都知道怎么做?
P.S。为什么我需要这个?我需要查找其值满足特定条件的字段,然后在其他表中写入该字段标签。我可以编写列名,但是简单的用户需要查看该数据,因此他们需要了解该字段的含义,这就是我需要检索字段标签的原因。
答案 0 :(得分:6)
您可以使用ir.model
和ir.model.fields
两个表格。在第二个上,您将使用“name”字段获得“标签”。
所以搜索具有特定模型的字段会获得标签。 :)
如有进一步的问题,请问:)
编辑:一个例子可能是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
答案 1 :(得分:1)
嗨,我认为在odoo版本11中,它是一项更容易完成的任务。
只需使用
._ fields()
,您将获得字段标签。
您可以在odoo控制台中使用dir()找到更多有用的功能。
希望会有所帮助。
谢谢。
答案 2 :(得分:0)
执行以下操作:
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}}