我想基于另一个字段(F2)将动态过滤器应用于manyone字段(F1)。我已经使用@api.change
装饰器完成了此操作,并且它可以正常工作,但未达到预期的效果。
[当我创建一个新实体时,我更改F2的值,然后转到F1,我发现它已过滤,好吧,没问题。
[当我关闭表单,然后再次对其进行编辑时,我直接转到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过滤器仅在该函数是触发器时才会应用,因此仅当您更改on change值时它才起作用,我想您需要做的是此操作或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())