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



  • 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



  • 在视图上设置字段 domain



  • [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



  • 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 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 属性值

    现在就是希望  创建或修改具体产品时,选择 产品模板后, 属性值的可选值是 产品模板中所有属性明细行的所有属性值。



  • 描述好混乱,看起来好费劲.....

    用fields_view_get方法吧,想怎么过滤就怎么过滤......


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待