Я хотел бы спросить об Odoo many2one field.
В модели test.project.name есть 3 поля:
Две другие модели использовали test.project.name с полем many2one:
'project_id':fields.many2one('test.project.name','Project Name'),
в этот раз в представлении будут отображаться данные поля name модели 'test.project.name'. С одной моделью все в порядке, но я хотел бы показать данные prj_id из 'test.project.name'.
Могу ли я стать таким?
Если вы не против, поделитесь идеями.
Спасибо.
Ответ 1 · рейтинг 1 · Danila Ganchar
Если вам нужно новое имя для всех 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". В противном случае ваше пользовательское имя будет использоваться только для элементов в раскрывающемся списке, но выбранное значение будет использовать имя по умолчанию.