Я собираюсь привести простой пример:
У меня есть два поля 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 в этой области, а это не то, что я хочу.
Итак, у вас есть идеи, как решить эту ситуацию?