Odoo名称在很多2字段的下拉列表中

时间:2016-02-05 10:32:26

标签: python openerp odoo-8

我想问一下Odoo many2one字段。

在'test.project.name'模型中,有3个字段:

  • 名称
  • prj_id
  • 活性

其他两个模型使用'test.project.name'和 many2one 字段:

'project_id':fields.many2one('test.project.name','Project Name'),

该时间视图将显示“test.project.name”模型的名称字段数据。 一个模型可以,但我想显示从'test.project.name'提交的 prj_id 数据。

我可以这样吗?

如果您不介意,请分享一些想法。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您需要系统中所有many2one('test.project.name')的新名称,请覆盖方法name_get。对于您的模型,它将是这样的(您使用旧的API):

class TestProject(osv.Model):
    _name = 'test.project.name'

    def name_get(self, cr, uid, ids, context):
        res = []
        for record in self.browse(cr, uid, ids, context=context):
            # As I understood prj_id it is many2one field. For example I set name of prj_id
            res.append((record.id, record.prj_id.name))
        return res

如果您需要为特定字段使用自定义名称,可以使用context来调用自定义方法,如下所示:

<!-- in your view.xml -->
<field name="project_id" widget="selection" context="{'compute_name': '_get_my_name'}"/>

模型必须如下所示:

class TestProject(osv.Model):
    _name = 'test.project.name'

    def name_get(self, cr, uid, ids, context=None):
        if u'compute_name' in context:
            # check value from frontend and call custom method
            return getattr(self, context[u'compute_name'])(cr, uid, ids, context)
        else:
            # call base method
            return super(TestProject, self).name_get(cr, uid, ids, context=context)

    def _get_my_name(self, cr, uid, ids, context):
        res = []
        for record in self.browse(cr, uid, ids, context=context):
            res.append((record.id, record.prj_id.name))
        return res

关于此解决方案还有一件事。

这种方式只有在您使用widget="selection"时才能正常工作。否则,您的自定义名称将仅用于下拉列表中的项目,但所选值将使用默认名称。