Если вам нужно новое имя для всех 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". В противном случае ваше пользовательское имя будет использоваться только для элементов в раскрывающемся списке, но выбранное значение будет использовать имя по умолчанию.
person
Danila Ganchar
schedule
26.02.2016