Как отфильтровать одно поле Many2one по значению другого в odoo - PullRequest
2 голосов
/ 19 июня 2019

В моей модели есть следующие поля:

seller = fields.Many2one('res.partner', string="Select Seller",domain="[('supplier','=',True)]")
products= fields.Many2one('product.template', string="Select Product" )

Теперь мне нужно отфильтровать второе поле, когда пользователь выбирает продавца (первое поле). Как настроить обмен доменов.

Я пытаюсь сделать что-то вроде

@api.onchange('seller')
    def onchange_field_seller(self):
        res = {}
        if self.seller:
            # return {'domain':{'product':[//what do i add here//]}}
        return res

Я использую поле many2many для создания продуктов в форме создания продавца.

product_details = fields.Many2many('product.template',string="Products")

(Обратите внимание, чтоФорма с этим полем отличается от формы в вопросе выше).Я пытаюсь получить только те записи о товарах, которые были созданы при создании записи о продавце. Я действительно запутался, как мне это сделать?

1 Ответ

3 голосов
/ 19 июня 2019

В вашем случае вы не можете использовать «динамический» домен, но больше предварительно определенного домена для идентификаторов продуктов.

@api.onchange('seller')
def onchange_field_seller(self):
    if self.seller:
        # filter products by seller
        product_ids = self.seller.product_details.ids
        return {'domain': {'product': [('id', 'in', product_ids)]}}
    else:
        # filter all products -> remove domain
        return {'domain': {'product': []}}
...