Odoo динамический домен many2one

Я хочу применить динамический фильтр к полю many2one (F1) на основе другого поля (F2). Я сделал это, используя@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')]}}

1 ответ

Поскольку фильтр 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())
Другие вопросы по тегам