我创建了一个名为product.service.type
的新模型。然后,在product.product
模型中,我还创建了一个Many2many
字段(名为service_type
,指向product.service.type
模型)。
现在我的模型test
包含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
没有被执行,因此,域显示所有服务类型。< / p>
您可以使用字段title
在合作伙伴表单中查看相同的问题。创建一个新的合作伙伴,即公司,title
字段的域名更改,以便您只选择 Corp。, Ltd。等记录,但如果您将合作伙伴设置为联系人,则可以选择 Doctor , Madam , Miss 等记录。现在,保存合作伙伴使用您想要的数据,然后转到顶部栏的其他菜单。返回合作伙伴表单并打开创建的合作伙伴进行编辑。检查title
字段,而不更改is_company
字段。现在,尽管您的合作伙伴属于特定类别(公司或联系人),但您可以使用所有标题。
我该如何解决这个问题?
答案 0 :(得分:1)
我认为,列出以下几点。它可以实现。
例如:
@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或根据您的要求进行转换。
答案 1 :(得分:0)
在您的模型test
上,在您的2个字段旁边,您还需要一个与对象service_type
的字段product.product
相关的额外数量2。然后将域名提供给您的字段service_type_id
。
以下是插图
在模型product.product
上,你有:
service_type
(m2m到product.service.type
)在模型test
上,你有:
product_id
(m2o到product.product
)service_type_id
(m2o到product.service.type
)available_service_type_ids
(与service_type
的{{1}}相关/计算的m2m)product.product
将拥有域service_type_id