其他分享
首页 > 其他分享> > 如何修复Odoo中的动态域问题?

如何修复Odoo中的动态域问题?

作者:互联网

我创建了一个名为product.service.type的新模型.然后,在product.product模型中,我还创建了一个Many2many字段(名为service_type,指向product.service.type模型).

现在我进行了模型测试,其中包含product_id和service_type_id字段,Many2one分别指向product.product和product.service.type.

我想要的是,如果您选择产品,服务类型域将更改为仅显示所选产品的服务类型.我通过onchange来管理这个:

def onchange_product_id(self, cr, uid, ids, product_id, context=None):
    if product_id:
        product = self.pool.get('product.product').browse(
            cr, uid, [product_id], context=context)
        service_type_ids = product.service_type.mapped('id')
        return {
            'domain': {
                'service_type_id': [('id', 'in', service_type_ids)],
            },
        }

这很有效,问题是当您编辑记录(而不是创建新记录)时,因为在这种情况下onchange没有被执行,因此,域显示所有服务类型.

您可以使用字段标题在合作伙伴表单中查看相同的问题.创建一个新的合作伙伴,这是一个公司,标题字段的域名更改,以允许您只选择像有限公司等的记录,但如果你设置合作伙伴是一个联系人,你可以选择像医生, Madam,Miss等.现在,使用您想要的数据保存合作伙伴,然后转到顶部栏的其他菜单.返回合作伙伴表单并打开创建的合作伙伴进行编辑.检查标题字段而不更改is_company字段.尽管您的合作伙伴属于特定类别(公司或联系人),但现在您可以使用所有标题.

我怎么能解决这个问题?

解决方法:

我认为,列出以下几点.它可以实现.

>在many2many字段xml端更新带有product_id的上下文.
>覆盖产品服务类型模型的search()方法
>检查是否收到相同的上下文并触发逻辑,否则返回super()方法

例如:

@api.model
def search(self, args, offset=0, limit=None, order=None, count=False):
    context = self._context or {}

    # Display product list which has not included in CofA Template
    if context.get('product_service_id'):
        product = self.env['product.product'].browse(context.get('product_service_id'))
        service_type_ids = product.service_type.mapped('id')
        args += [('service_type_id', 'not in', service_type_ids)]

    return super(ProductServiceType, self).search(args,
                                               offset,
                                               limit,
                                               order,
                                               count=count)

在XML方面:

<field name="product_id"/>
<field name="many2many_field" context="{'product_service_id': product_id}">

注意:我已尝试按照新API进行回答,但尚未对其进行测试.您需要使用旧API或根据您的要求进行转换.

标签:python,python-2-7,odoo,odoo-8
来源: https://codeday.me/bug/20190705/1389906.html