首页 > 解决方案 > Odoo:动态域过滤结果仅一次

问题描述

我正在尝试many2one使用onchange函数将域动态传递给字段。它设法检索所需的结果(根据需要过滤结果),但它只执行一次。换句话说,该onchange函数成功地仅根据第一个选择过滤结果,并且任何先前的选择似乎都不会影响域过滤。

代码:

class ReturnProduct(models.Model):
    _name = 'custom.return.product'
    sale_id = fields.Many2one(comodel_name="custom.sale", string="Invoice #", required=False, )
    return_line_ids = fields.One2many("custom.return.line", "return_product_id", string="Products")

class ReturnLine(models.Model):
    _name = "custom.return.line"
    return_product_id = fields.Many2one("custom.return.product", string="Return Reference")
    sale_line_id = fields.Many2one("custom.sale.line", string="Product")
    reason = fields.Text(String="Return Reason")

    @api.onchange('return_product_id')
    def onchange_product_id(self):
        domain = {}
        sale_line_ids = []
        if self._context.get('sale_id'):
            sale_id = self.env["custom.sale"].browse(self._context.get('sale_id'))
            for sale_line in sale_id.product_ids.ids:
                sale_line_ids.append(sale_line)
        domain = {'sale_line_id': [('id', 'in', sale_line_ids)]}
        return {'domain': domain}

标签: pythonodoo-12

解决方案


我认为您需要根据销售线中的产品在退货向导中过滤产品。您需要销售线中的产品出现在退货产品线中

为此,您可以执行以下操作

@api.onchange('return_product_id')
def onchange_product_id(self):
    domain = {}
    product_ids = []
    if self._context.get('sale_id'):
        sale_id = self.env["custom.sale"].browse(self._context.get('sale_id'))
        for sale_line in sale_id.product_ids:
            product_ids.append(sale_line)
    domain = {'return_product_id': [('id', 'in', product_ids)]}
    return {'domain': domain}

所以实际上你想为产品设置域。


推荐阅读