我想问一下Odoo many2one字段。
在'test.project.name'模型中,有3个字段:
其他两个模型使用'test.project.name'和 many2one 字段:
'project_id':fields.many2one('test.project.name','Project Name'),
该时间视图将显示“test.project.name”模型的名称字段数据。 一个模型可以,但我想显示从'test.project.name'提交的 prj_id 数据。
我可以这样吗?
如果您不介意,请分享一些想法。
感谢。
答案 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"
时才能正常工作。否则,您的自定义名称将仅用于下拉列表中的项目,但所选值将使用默认名称。