在Odoo8中将动态域应用于many2many字段的最佳方法?

时间:2016-07-12 10:37:49

标签: python xml python-2.7 odoo-8 odoo

我有一个模型,用户可以在其中选择狗的品种(dog_breed,选择字段)。然后,在同一个模型中,我有一个Many2many字段(dogs),用户可以在其中添加狗。但是我希望当用户添加一只狗时,他只能选择那些品种是Selection字段中选择的狗。

<field name="dog_breed"/>
<field name="dogs" domain="[('breed', '=', dog_breed)]"/>

当您向Many2many添加元素时,首先会看到可用记录的列表,如果您要查找的记录已存在,则选择其中一个记录。我需要的是将域应用于该列表。

  

示例:

     

用户在选择字段dog_breed中选择 foxterrier 。现在   他在Many2many dogs中添加了一个元素。包含所有内容的列表   可用的狗将被打开,但我想显示所有的列表   可用 foxterriers 。为此,我编写了上面的代码,但确实如此   根本不工作。

但是,如果我以这种方式修改代码:

<field name="dog_breed"/>
<field name="dogs" domain="[('breed', '=', 'foxterrier')]"/>

它完美无缺。是否可以从XML代码管理它?

1 个答案:

答案 0 :(得分:1)

必须在Python代码中应用动态域,在这种情况下甚至不需要使用 onchanges 来返回所需的域,我只需要将域名剪切为定义Python中的Many2many字段:

dogs = fields.Many2many(
    comodel_name='dog',
    relation='mss_dog_rel',
    column1='mss_id',
    column2='dog_id',
    string='Dogs',
    domain="[('breed', '=', dog_breed)]",
)