Python 获取OpenERP中字段的标签名称
如何获取任何模型中字段的标签名称 例如,写这篇文章:Python 获取OpenERP中字段的标签名称,python,label,openerp,Python,Label,Openerp,如何获取任何模型中字段的标签名称 例如,写这篇文章: obj = self.read(cr,uid,ids)[0] 它将获得给定记录中字段名称(技术名称或数据库列名)及其值的字典 例如,输出是这样的: {'field1': 10, 'field2': 'hello', 'field3': 3.56} 但是它不返回字段的标签,我也不能从这里访问它,因为这里的字段名只是一个字符串 假设有上述领域: _columns = { 'field1': fields.integer('First
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'),
}
那么我如何才能得到这个结果呢(我知道精确的输出是不可能的,因为标签不是关键,但我只是展示它以更好地理解问题):
因此,我认为检索标签的代码可能如下所示:
for k, v in obj.iteritems():
print k.label
但没有这样的属性。在fields.py文件中,我在大多数字段类型中看到了string
命名属性被用作标签的输入,它具有默认输入string='unknown'
,但我不知道如何在迭代模型中的所有字段时检索它
有人知道怎么做吗
我为什么需要这个?我需要找到其值满足特定条件的字段,然后将该字段标签写入其他表中。我可以写列名,但简单的用户需要看到这些数据,所以他们需要理解该字段的含义,这就是我需要检索字段标签的原因。有两个表可以使用
ir.model
和ir.model.fields
。在第二个选项中,您将使用字段“name”获得“labels”
因此,搜索具有特定模型的字段“到达那里”标签。:)
进一步的问题只需问:)
编辑:例如sale.order,如果我想使用res.partner为m2o关系字段添加所有标签
...
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
...
第二次编辑:在class属性\u列
中,您将拥有所有字段。所需的属性是string
for field in self._columns.itervalues():
print field.string
有两个表可以使用
ir.model
和ir.model.fields
。在第二个选项中,您将使用字段“name”获得“labels”
因此,搜索具有特定模型的字段“到达那里”标签。:)
进一步的问题只需问:)
编辑:例如sale.order,如果我想使用res.partner为m2o关系字段添加所有标签
...
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
...
第二次编辑:在class属性\u列
中,您将拥有所有字段。所需的属性是string
for field in self._columns.itervalues():
print field.string
嗨,我认为在odoo版本11中,它是一个更容易完成的任务 只用 ._字段() 您将获得字段标签 在odoo控制台中使用dir()可以找到更有用的函数 希望这会有所帮助
谢谢。嗨,我认为在odoo版本11中,这是一项更容易完成的任务 只用 ._字段() 您将获得字段标签 在odoo控制台中使用dir()可以找到更有用的函数 希望这会有所帮助 谢谢。请执行以下操作:
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}}
这样做:
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}}
您能否编写一个示例,说明如何使用
ir.model.fields
从某个型号检索一个标签?谢谢。只需很少的修复,它就能工作。但是,如果其他人需要类似的东西,最好是修复错误。型号标识行中的第一个,]
在销售后丢失。订单
域。第二次你写了ttype
。第三,它应该是field.field\u description,因为name返回的是列名,而不是label。另外,也许您会知道。如果我需要内部模型id,而不是外部(如本例所示)。就像我在sale.order
中写方法一样。也许有更简单的方法从模型内部获取模型id?就像是为了记录你可以浏览的地方?请注意,是t类型
。奇怪的是他们选择了这样的名字:)我不明白你的问题:/。但另一种获取标签的方法是在我的第二次编辑中。第二种方法更简单。谢谢所以我甚至不需要model_id(我问的问题你说不明白),你能写一个例子,如何使用ir.model.fields
,从某个模型中检索一个标签吗?谢谢。只需很少的修复,它就能工作。但是,如果其他人需要类似的东西,最好是修复错误。型号标识行中的第一个,]
在销售后丢失。订单
域。第二次你写了ttype
。第三,它应该是field.field\u description,因为name返回的是列名,而不是label。另外,也许您会知道。如果我需要内部模型id,而不是外部(如本例所示)。就像我在sale.order
中写方法一样。也许有更简单的方法从模型内部获取模型id?就像是为了记录你可以浏览的地方?请注意,是t类型
。奇怪的是他们选择了这样的名字:)我不明白你的问题:/。但另一种获取标签的方法是在我的第二次编辑中。第二种方法更简单。谢谢所以我甚至不需要model_id(你说我不明白我在问这个问题)