如何在Odoo 11中为指向同一模型的两个Many2one管理不同的显示名称?

时间:2018-09-04 09:25:10

标签: python xml python-3.x odoo odoo-11

我要举一个简单的例子:

我有两个 Many2one 字段dog_namedog_alias,它们都指向dog模型。此模型具有 Char 字段namealias

当我打开dog_name的下拉菜单时,我应该看到狗的名字,当我打开dog_alias的下拉菜单时,我应该看到狗的别名。

例如,如果我打开,我有一个记录dog,其ID为 57 ,名称为 Fox ,别名为 Foxito dog_name的下拉菜单中,我应该看到 Fox ,如果打开dog_alias的下拉列表,则应该看到 Foxito 。但是,如果我选择其中任何一个,则所选记录将相同(ID为 57 的记录)。

要管理此行为,我总是将name_get与XML上下文结合使用:

odoo - display name of many2one field combination of 2 fields

但是,这次发生了以下情况:部署dog_alias下拉列表时,我看到了 Foxito ,效果很好,但是当我保存记录时,看到了狐狸。我猜是因为那是模型的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文件中设置的那个,因此,如果在保存后我在dog_alias字段中选择了 Foxito 请参阅该字段中的 Fox ,这不是我想要的。

那么,您对如何解决这种情况有任何想法吗?

0 个答案:

没有答案