获取 OpenERP 中字段的标签名称
Posted
技术标签:
【中文标题】获取 OpenERP 中字段的标签名称【英文标题】:Get label names for fields in OpenERP 【发布时间】:2014-03-20 12:49:58 【问题描述】:如何获取任何模型中字段的标签名称?
例如这样写:
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'
,但我不知道如何在迭代模型中的所有字段时检索它.
有人知道怎么做吗?
附:为什么我需要这个?我需要找到值满足特定条件的字段,然后将该字段标签写入其他表中。我可以写列名,但简单的用户将需要查看该数据,因此他们需要了解该字段的含义,这就是我需要检索字段标签的原因。
【问题讨论】:
【参考方案1】:您可以使用两个表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
【讨论】:
你能写一个例子,如何使用ir.model.fields
从某个模型中检索一个标签吗?
谢谢。只需少量修复,它就可以工作。但如果其他人需要类似的东西,最好修复错误。 model_id 行中的第一个,]
在sale.order
域之后丢失。第二个你写了ttype
。第三,应该是 field.field_description,因为 name 返回的是列名,而不是标签。
另外,也许你会知道。如果我需要内部模型 ID,而不是外部模型 ID(如本例所示)。就像我要在sale.order
中编写方法一样。也许有更简单的方法可以从该模型内部获取模型 ID?喜欢它是为了记录,您可以在哪里浏览它?附:对,是ttype
。奇怪的是他们选择了这样的名字:)
我不明白你的问题:/。但另一种获取标签的方法是在我的第二次编辑中。
第二种方法更简单。谢谢。所以我什至不需要model_id(我在问你说不明白)【参考方案2】:
您好,我认为在 odoo 版本 11 中它更容易完成。
随便用
._fields()
你会得到字段标签。
您可以在odoo控制台中使用dir()找到更多有用的功能。
希望这会有所帮助。
谢谢。
【讨论】:
【参考方案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
【讨论】:
以上是关于获取 OpenERP 中字段的标签名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenERP 服务器源代码中查找(并可能扩展)报告的可用字段名称列表?
如何使用适用于 OpenOffice / LibreOffice 的 OpenERP 报表设计器插件获取字段列表