[已解决]属性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中间表增加第三列,
那你可以去改框架,
给中间表增加第三列对应的业务逻辑
-
@digitalsatori
1、store=False,不生成中间表的话,那我这里写了一个中间表没问题吗?
2、如果不生成中间表,那他们的对应关系是怎么存储的? -
这个字段的值,是你定义的函数
_get_old_part_list
算出来的啊 -
@digitalsatori
我知道那个字段的值是我算出来的。
但是如果没有这个中间表,我还是写了relation
是不是错的了啊? -
想想看,即使有这个中间表,你都根本没有用到,有意义吗?
-
@digitalsatori
没意义。这个中间表不存在的,那
relation
引用一个没有的,column1,column2
的值也是没有的,这个也不报错的啊?