Имя Odoo в раскрывающемся списке для поля many2one

Я хотел бы спросить об Odoo many2one field.

В модели test.project.name есть 3 поля:

  • название
  • prj_id
  • активный

Две другие модели использовали test.project.name с полем many2one:

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

в этот раз в представлении будут отображаться данные поля name модели 'test.project.name'. С одной моделью все в порядке, но я хотел бы показать данные prj_id из 'test.project.name'.

Могу ли я стать таким?

Если вы не против, поделитесь идеями.

Спасибо.


person Thae Ei Htwe    schedule 05.02.2016    source источник
comment
Ваш вопрос не слишком ясен. Пожалуйста, постарайтесь подробно изложить свой вопрос с надлежащим описанием.   -  person DASADIYA CHAITANYA    schedule 07.02.2016


Ответы (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". В противном случае ваше пользовательское имя будет использоваться только для элементов в раскрывающемся списке, но выбранное значение будет использовать имя по умолчанию.

person Danila Ganchar    schedule 26.02.2016