Домен Odoo Dynami c Many2one - PullRequest
       23

Домен Odoo Dynami c Many2one

0 голосов
/ 03 марта 2020

Я хочу применить динамический c фильтр к полю many2one (F1) на основе другого поля (F2). Я сделал это, используя @api.change декоратор, и он работает, но не так, как ожидалось.

Когда я создаю новую сущность, я изменяю значение F2, затем go на F1, я нахожу его поданным , Оки, нет проблем.

Когда я закрываю форму, а затем снова ее редактирую, и я go прямо в поле F1, я снова получаю все доступные возможности (не отфильтрованные), мне нужно сначала go до 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 Ответ

0 голосов
/ 04 марта 2020

Поскольку фильтр 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())
...