Как управлять разными отображаемыми именами для двух Many2one, указывающих на одну и ту же модель в Odoo 11? - PullRequest
0 голосов
/ 04 сентября 2018

Я собираюсь привести простой пример:

У меня есть два поля Many2one , dog_name, dog_alias, оба они указывают на модель dog. Эта модель имеет поля Char name и alias.

Когда я открываю раскрывающийся список dog_name, я вижу имя собаки, когда открываю раскрывающийся список dog_alias, я должен видеть псевдоним собаки.

Например, у меня есть запись dog с идентификатором 57 , именем Fox и псевдонимом Foxito , если я открою раскрывающийся список dog_name, Я должен увидеть Fox , если я открою выпадающее меню dog_alias, я должен увидеть Foxito . Но если я выберу любую из них, выбранная запись будет такой же (та, которая имеет идентификатор 57 ).

Для управления этим поведением я всегда использовал name_get в сочетании с контекстом XML:

odoo - отображаемое имя many2one, комбинация из 2 полей

Однако на этот раз происходит следующее: при развертывании раскрывающегося списка dog_alias я вижу Foxito , который прекрасно работает, но когда я сохраняю запись, я вижу Fox . Я думаю, потому что это display_name модели, но если я сделаю это:

Python

@api.multi
@api.depends('name', 'alias')
def _compute_display_name(self):
    for dog in self:
        if self._context.get('display_name', False) == 'alias':
            dog.display_name = dog.alias
        else:
            dog.display_name = dog.name

display_name = fields.Char(
    compute='_compute_display_name',
)
dog_name = fields.Many2one(
    comodel_name='dog',
    string='Dog Names',
    required=True
)
dog_alias = fields.Many2one(
    comodel_name='dog',
    string='Dog Aliases'
)

XML

<field name="dog_name"/>
<field name="dog_alias" context="{'display_name': 'alias'}"/>

Проблема все та же. context в методе _compute_display_name никогда не возвращает тот, который я установил в XML-файле, поэтому, если я выберу Foxito в поле dog_alias, после сохранения я вижу Fox в этой области, а это не то, что я хочу.

Итак, у вас есть идеи, как решить эту ситуацию?

...