首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Odoo动态many2one域

Odoo动态many2one域
EN

Stack Overflow用户
提问于 2020-03-04 01:36:56
回答 1查看 1K关注 0票数 1

我想将动态过滤器应用于基于另一个字段(F2)的many2one字段(F1)。我已经使用@api.change装饰器做到了这一点,它可以工作,但并不像预期的那样。

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

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

有什么想法吗?(下面的代码: F1 = product_id,它是继承的,F2 = bom_id)

代码语言:javascript
复制
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')]}}
EN

回答 1

Stack Overflow用户

发布于 2020-03-04 10:28:42

由于onchange筛选器仅在函数是触发器时才会应用,因此它仅在您更改on change值时才起作用。我猜您需要做的是onchange字段和默认域on字段的这两者或两者的组合

代码语言:javascript
复制
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())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60512746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档