[英]ODOO 10 many2many
我在ODOO 10中有一个many2many关系的问题。 我通过这种方式扩展了res.partner:
class ResPartner(models.Model):
x_bagsdesign = fields.Many2many('product.product',string='Bags Design',relation='bags_design_manufactur')
然后我还扩展了product.template模型:
class product_template_fields(models.Model):
_inherit = 'product.template'
x_traders_stock = fields.Many2many(
'res.partner', string='Traders with access to stock',relation='xtradstock_res_partner_rel')
@api.multi
def write(self, vals):
record = super(product_template_fields, self).write(vals)
for singletrader in self.x_traders_stock:
singletrader.x_bagsdesign = [(4,self.id)]
return record
这样,每次在product.template中插入新的x_traders_stock时,在res.partner中也会创建一个新的x_bags_design。
但是..当我在product.template中保存新记录时,出现sql错误:
bad query: INSERT INTO bags_design_manufactur (res_partner_id, product_product_id)
(SELECT a, b FROM unnest(ARRAY[1]) AS a, unnest(ARRAY[7]) AS b)
EXCEPT (SELECT res_partner_id, product_product_id FROM bags_design_manufactur WHERE res_partner_id IN (1))
我不知道sql查询的EXCEPT部分来自哪里以及如何防止它。 如果有人可以帮助我,将不胜感激..谢谢!
错误消息与预期的有所不同,但是我可以解决您代码中的一些问题。 首先,你必须考虑到一个product.product
对象是的变体product.template
对象,这样你就可以在数据库中多有product.product
指向同一个对象product.template
(如product.template
是一件T恤和一个product.product
是一件T恤,颜色是红色M )。 这意味着您不能像在这里那样在期望有product.product
ID的字段中设置product.template
的ID:
singletrader.x_bagsdesign = [(4,self.id)]
当然,该错误不会给您所收到的消息错误,您的代码的其他部分一定存在错误(我想这与bags_design_manufactur
模型有关)。
但是,要解决我在上面告诉您的问题,您应该编写以下代码:
class product_template_fields(models.Model):
_inherit = 'product.template'
x_traders_stock = fields.Many2many(
comodel_name='res.partner',
string='Traders with access to stock',
relation='xtradstock_res_partner_rel'
)
@api.multi
def write(self, vals):
result = super(product_template_fields, self).write(vals)
for prod_templ in self:
products = self.env['product.product'].search([
('product_tmpl_id', '=', prod_templ.id),
])
for singletrader in prod_templ.x_traders_stock:
singletrader.write({
'x_bagsdesign': [(4, product.id) for product in products],
})
return result
编辑
product.product
从继承product.template
的代表团,这意味着每次你在创建领域product.template
模型将是可用product.product
对象,所以当你正在创建的Many2many场x_traders_stock
在product.template
,你”在product.product
也重新创建它,因此您不必每次生成x_trader时都添加记录。 相反,您应该更改模型:
class ResPartner(models.Model):
x_bagsdesign_prod_templ = fields.Many2many(
comodel_name='product.template',
column1='partner_id',
column2='product_tmpl_id',
string='Bags Design',
relation='xtradstock_res_partner_rel'
)
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_traders_stock = fields.Many2many(
comodel_name='res.partner',
column1='product_tmpl_id',
column2='partner_id',
string='Traders with access to stock',
relation='xtradstock_res_partner_rel'
)
然后,如果要访问合作伙伴拥有的product.product
对象,则可以通过以下方式进行操作:
any_partner.x_bagsdesign_prod_templ.mapped('product_variant_ids')
如果愿意,您甚至可以在res.partner
创建一个新的相关字段,该字段为伙伴提供了product.product
对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.