【问题标题】:Get label names for fields in OpenERP获取 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',但我不知道如何在迭代模型中的所有字段时检索它.

有人知道怎么做吗?

附:为什么我需要这个?我需要找到值满足特定条件的字段,然后将该字段标签写入其他表中。我可以写列名,但简单的用户将需要查看该数据,因此他们需要了解该字段的含义,这就是我需要检索字段标签的原因。

【问题讨论】:

    标签: python label openerp


    【解决方案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}}
      

      【讨论】:

        猜你喜欢
        • 2013-09-29
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 1970-01-01
        • 1970-01-01
        • 2015-10-27
        • 2020-11-19
        相关资源
        最近更新 更多