Many2many 字段下拉框显示数据的过滤
-
odoo v9
案例:
前提:产品已启用多属性,并取消了产品模板根据属性自动创建变体的功能 。
目标:新建具体产品(product.product)或者编辑具体产品时,属性值(attribute_value_ids) 的可选值为已选产品模板(product_tmpl_id)添加的属性明细行(attribute_line_ids)中的属性值(value_ids)
这样的过滤如何实现?
目前尝试过 onchange ,新建的时候是可以,但是保存后,从新编辑,domain 就又不生效了。
@api.onchange('product_tmpl_id')
def product_tmpl_values_onchange(self):
if self.product_tmpl_id:
values = self.env['product.attribute.value']
attribute_line = self.env['product.attribute.line'].search(
[('product_tmpl_id', '=', self.product_tmpl_id.id)])
for i in attribute_line:
values += i.value_ids
return {'domain': {'attribute_value_ids': [('id', 'in', values.ids)]}}
else:
return {'domain': {'attribute_value_ids': [('id', 'in', [])]}}
o -
[quote author=mrshelly link=topic=17622.msg32295#msg32295 date=1464052045]
在视图上设置字段 domain
[/quote]
我的理解只能通过id来过滤了。但是 值 没法写, product template 跟属性值没有直接关系。
domain = [('id', 'in', [])], value 不知道怎么写。
product.template one2many --> attribute.line many2many --> attribute.value
product.product many2many --> attribute.value
many2one --> product.template -
[quote author=开阖-静静 link=topic=17622.msg32308#msg32308 date=1464168595]
many2many 的domain和one2many是一样的,可以直接用对方表的字段过滤 <field name="share_to_ids" widget="many2many_tags" domain="[('groups_id','=',%(base.group_sale_salesman)d)]" (share_to_ids是many2many 到user 的 )
论坛里一以前有相似的帖子,好好翻翻看..
[/quote]
的确可以用those model 的字段,问题是,those model 跟 product.template 没关系。
具体产品 many2many 属性值
具体产品 many2one 产品模板
产品模板 one2many 属性明细行
属性明细行 many2many 属性值
现在就是希望 创建或修改具体产品时,选择 产品模板后, 属性值的可选值是 产品模板中所有属性明细行的所有属性值。