Odoo 动态多对一域

2023-12-04

我想将动态过滤器应用于基于另一个字段 (F2) 的多对一字段 (F1)。我已经使用了@api.change装饰器,它可以工作,但不符合预期。

当我创建一个新实体时,我更改F2的值,然后转到F1,我发现它已归档,Oki没问题。

当我关闭表单,然后再次编辑它,然后直接转到 F1 字段时,我再次获得所有可用的可能性(未过滤),我需要首先转到 F2,然后选择相同的值(之前已选择)然后回到F1。

任何想法 ? (代码下方:F1=product_id,是继承的,F2=bom_id)

class ProductionLot(models.Model):
    _inherit = "stock.production.lot"

    company_id = fields.Many2one(default=lambda self: self.env['res.company']._company_default_get('account.invoice'))

    bom_serial_number_line_ids = fields.One2many("mrp.bom.serialnumber.line", "parent_lot_id", "BoM Serial Numbers")
    bom_id = fields.Many2one("mrp.bom", "BoM")

    @api.onchange('product_id')
    def update_bom_id_from_product_id(self):
        for record in self:
            if (record.product_id):
                bom_complex_kit = record.product_id.env['mrp.bom']._bom_find(
                    product_tmpl=record.product_id.product_tmpl_id,
                    bom_type='complex_kit')

                self.bom_id = bom_complex_kit

            return {"domain": {"bom_id": [('product_tmpl_id.id', '=', record.product_id.product_tmpl_id.id),
                                          ('type', '=', 'complex_kit')]}}

由于 onchange 过滤器仅在该函数是触发器时才会应用,因此仅当您更改 onchange 值时它才会起作用,我想您需要做的是这个或 onchange 和字段上的默认域的组合

def get_domain(self):
    ids = self.env['stock.production.lot'].browse(self._context.get('active_ids'))
    print("Here see all ids and use them accordingly",ids) 

bom_id = fields.Many2one("mrp.bom", "BoM", domain = lambda self:self.get_domain())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Odoo 动态多对一域 的相关文章

随机推荐