获取 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.modelir.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 报表设计器插件获取字段列表

odoo widgets.js 笔记

Odoo(OpenERP)开发实践:数据模型学习

从 openERP 中的 mail_message 获取 author_id

OpenERP - 不同视图页面中字段的onchange方法?