将列表记录传递给 odoo 中的 many2many 字段

Pass list records to many2many field in odoo

我创建了一个 wiz 来获取字段“catagory_select”中的产品,请查看下面的代码:

class CategorySelect(models.TransientModel):
    _name = 'product.group'
    category_select = fields.Many2many('product.category', string='Category')

    def start_search_product(self):
        wiz_form = self.env.ref('product_filter.get_products_form_all', False)
        for rec in self.category_select:
            product_res = self.env['product.product'].search([('categ_id', '=', rec.ids)])
        print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^', product_res)
        return {
            'type': 'ir.actions.act_window',
            'name': "Product Filtered",
            'res_model': 'product.selection',
            'target': 'new',
            'view_id': wiz_form.id,
            'view_mode': 'form',
            }
        }

这里我所做的是我创建了一个方法,该方法 return 是一个向导,但我不知道如何将“product_res”传递给另一个向导中的 many2many 字段这就是所谓的 return 菜单。

“我们将不胜感激”

您可以在 context 上设置 默认 fields 设置您的值。

ctx = self._context.copy()
ctx.update({'default_m2m_fields': [(6, 0, IDS)]}) # on new wizard the m2m fields set with default on context

您可以使用上下文

将 product_res 传递给另一个向导

1/ 更新您的 start_search_product 以传递 product_res ID:

def start_search_product(self):
    product_res_ids = [p.id for p in product_res]
    context = {'product_ids': product_res_ids}
    return {
        'type': 'ir.actions.act_window',
        'name': "Product Filtered",
        'res_model': 'product.selection',
        'target': 'new',
        'view_id': wiz_form.id,
        'view_mode': 'form',
        'context': context,
        }
    }

2/ 在 ProductSelection 向导的 default_get 函数中获取产品 ID:

product_ids = fields.Many2many('product.product', 'Products')

@api.model
def default_get(self, default_fields):
     res = super(ProductSelection, self).default_get(default_fields)
     product_ids = self._context.get('product_ids')
     res.update({'product_ids': [(6, 0, product_ids)]})
     return res