
Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn
由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解
本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!
开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号
如果您登录系统碰到问题,请在微信公众号留言:
[已解决]属性relation,column1,column2
-
如下图:在自己跟自己建立多对多的关系的时候,其中
relation
是关系表的意思(但是在数据库中找不到啊),属性column1,column2
是不是不局限于两个字段,如果我有3个,是不是还可以写column3
?old_spare_part_ids = fields.Many2many('product.template', string="Old Spare Parts", store=False,relation='product_template_product_template_rel', column1='product_id1',column2='product_id2',compute="_get_old_part_list", readonly=True) @api.one @api.depends('write_date', 'new_spare_part1_id', 'new_spare_part2_id', 'new_spare_part3_id') def _get_old_part_list(self): old_part_ids = self.env[self._inherit].search( ['|', '|', ('new_spare_part1_id', '=', self.id), ('new_spare_part2_id', '=', self.id), ('new_spare_part3_id', '=', self.id)]) self.old_spare_part_ids = False if old_part_ids: # print old_part_ids self.old_spare_part_ids = [(6, 0, old_part_ids.ids)]
-
many2many 关系是通过中间表关联的,
中间表只有两列,分别是A表的id 和 B表的id,
relation 对应了中间表的表名,
如果你不赋值,默认是将两列列名拼起来加上rel后缀,
但在列名过长的情况下可能会触发postgres 表名过长的问题,
导致中间表不能生成,
(postgres 表名不能超过64),
column1,column2, 你不赋值,默认模型名_id,
many2many 中间表不存在第三列,
中间表是个两张表的互相映射关系。
除非你有业务需求需要往many2many中间表增加第三列,
那你可以去改框架,
给中间表增加第三列对应的业务逻辑
-
@siyuan
1、中间表数据库应该有记录的吧
2、模型名是product.template,column1页不应该是product_template_id?
-
-
中间表数据库肯定有,如果没有那就是模型升级没成功
-
如果你是product_template 里面有一个字段和别的表是 many2many关系,
那么这个字段的many2many 中间表的column1 列名默认:product_template_id,
-
-
@siyuan
1、模块升级是成功的了的
2、我这个m2m的是product.template
跟product.template
,按理不是应该column
都应该是product_template_id
,上面代码那样写是给的别名吗?
-
This post is deleted!
-
@hui 你这是一个compute字段,并且
store=False
,系统是不会生成对应的中间表的。
-
@digitalsatori
1、store=False,不生成中间表的话,那我这里写了一个中间表没问题吗?
2、如果不生成中间表,那他们的对应关系是怎么存储的?
-
这个字段的值,是你定义的函数
_get_old_part_list
算出来的啊
-
@digitalsatori
我知道那个字段的值是我算出来的。
但是如果没有这个中间表,我还是写了relation
是不是错的了啊?
-
想想看,即使有这个中间表,你都根本没有用到,有意义吗?
-
@digitalsatori
没意义。这个中间表不存在的,那
relation
引用一个没有的,column1,column2
的值也是没有的,这个也不报错的啊?