跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. [已解决]属性relation,column1,column2

[已解决]属性relation,column1,column2

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
12 帖子 3 发布者 1.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • H 离线
    H 离线
    hui
    写于 最后由 hui 编辑
    #1

    如下图:在自己跟自己建立多对多的关系的时候,其中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)]
    
    1 条回复 最后回复
    0
    • S 离线
      S 离线
      Siyuan
      写于 最后由 编辑
      #2

      many2many 关系是通过中间表关联的,

      中间表只有两列,分别是A表的id 和 B表的id,

      relation 对应了中间表的表名,

      如果你不赋值,默认是将两列列名拼起来加上rel后缀,

      但在列名过长的情况下可能会触发postgres 表名过长的问题,

      导致中间表不能生成,

      (postgres 表名不能超过64),

      column1,column2, 你不赋值,默认模型名_id,


      many2many 中间表不存在第三列,

      中间表是个两张表的互相映射关系。


      除非你有业务需求需要往many2many中间表增加第三列,

      那你可以去改框架,

      给中间表增加第三列对应的业务逻辑

      H 1 条回复 最后回复
      0
      • H 离线
        H 离线
        hui
        在 回复了 Siyuan 最后由 编辑
        #3

        @siyuan
        1、中间表数据库应该有记录的吧
        2、模型名是product.template,column1页不应该是product_template_id?

        S 1 条回复 最后回复
        0
        • S 离线
          S 离线
          Siyuan
          在 回复了 hui 最后由 编辑
          #4

          @hui

          1. 中间表数据库肯定有,如果没有那就是模型升级没成功

          2. 如果你是product_template 里面有一个字段和别的表是 many2many关系,

          那么这个字段的many2many 中间表的column1 列名默认:product_template_id,

          H 1 条回复 最后回复
          0
          • H 离线
            H 离线
            hui
            在 回复了 Siyuan 最后由 编辑
            #5

            @siyuan
            1、模块升级是成功的了的
            2、我这个m2m的是product.template跟product.template,按理不是应该column都应该是 product_template_id,上面代码那样写是给的别名吗?

            1 条回复 最后回复
            0
            • H 离线
              H 离线
              hui
              写于 最后由 编辑
              #6
              此回复已被删除!
              1 条回复 最后回复
              0
              • digitalsatoriD 离线
                digitalsatoriD 离线
                digitalsatori 管理员
                写于 最后由 编辑
                #7

                @hui 你这是一个compute字段,并且store=False,系统是不会生成对应的中间表的。

                【上海先安科技】(tony AT openerp.cn)

                1 条回复 最后回复
                0
                • H 离线
                  H 离线
                  hui
                  写于 最后由 编辑
                  #8

                  @digitalsatori
                  1、store=False,不生成中间表的话,那我这里写了一个中间表没问题吗?
                  2、如果不生成中间表,那他们的对应关系是怎么存储的?

                  1 条回复 最后回复
                  0
                  • digitalsatoriD 离线
                    digitalsatoriD 离线
                    digitalsatori 管理员
                    写于 最后由 编辑
                    #9

                    这个字段的值,是你定义的函数_get_old_part_list算出来的啊

                    【上海先安科技】(tony AT openerp.cn)

                    H 1 条回复 最后回复
                    0
                    • H 离线
                      H 离线
                      hui
                      在 回复了 digitalsatori 最后由 编辑
                      #10

                      @digitalsatori
                      我知道那个字段的值是我算出来的。
                      但是如果没有这个中间表,我还是写了 relation是不是错的了啊?

                      1 条回复 最后回复
                      0
                      • digitalsatoriD 离线
                        digitalsatoriD 离线
                        digitalsatori 管理员
                        写于 最后由 编辑
                        #11

                        想想看,即使有这个中间表,你都根本没有用到,有意义吗?

                        【上海先安科技】(tony AT openerp.cn)

                        H 1 条回复 最后回复
                        0
                        • H 离线
                          H 离线
                          hui
                          在 回复了 digitalsatori 最后由 编辑
                          #12

                          @digitalsatori
                          没意义。

                          这个中间表不存在的,那relation引用一个没有的,column1,column2的值也是没有的,这个也不报错的啊?

                          1 条回复 最后回复
                          0

                          • 登录

                          • 没有帐号? 注册

                          • 登录或注册以进行搜索。
                          • 第一个帖子
                            最后一个帖子
                          0
                          • 版块
                          • 标签
                          • 热门
                          • 用户
                          • 群组