• 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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 中文社区

[已解决]继承sale.order添加字段,报错KeyError,是不能related吗

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

    在一个trainee模块中继承了sale.order

    class Trainee_order(models.Model):
        _inherit = 'sale.order'
    
        order_source_name = fields.Char(string=u'来源姓名')
    

    所有功能都正常,字段也能正常使用,但是在更新sale.order的时候就会报错

      File "E:\greenodoo10-win-20170722\shaddockerp\odoo10\odoo\models.py", line 2851, in _setup_fields
        field.setup_full(self)
      File "E:\greenodoo10-win-20170722\shaddockerp\odoo10\odoo\fields.py", line 506, in setup_full
        self._setup_related_full(model)
      File "E:\greenodoo10-win-20170722\shaddockerp\odoo10\odoo\fields.py", line 543, in _setup_related_full
        field = target._fields[name]
    KeyError: 'order_source_name'
    

    开始不知道原因,后来发现好像是related的问题

    class Maternity_Matron_Order_Manage(models.Model):
        _name = 'maternity_matron.order'
    
        order_id = fields.Many2one('sale.order', domain=[(
            'state', '=', 'sale')], ondelete='cascade', string=u'订单')
        order_source = fields.Char(related='order_id.order_source_name', string=u'订单来源')
    

    貌似去掉related就不会报错,请教一下这是什么原因,我这么分析的对吗,应该怎么解决这种问题,trainee与maternity_matron不在同一模块中

    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了56410725 最后由 编辑
    #2

    @56410725
    我只用你这两个model写个模块不会报错的

    1 条回复 最后回复
    0
  • 5 离线
    5 离线
    56410725
    写于 最后由 编辑
    #3
    此回复已被删除!
    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了56410725 最后由 编辑
    #4

    @56410725
    妥妥的没问题。你再排查下其他问题。

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

    @hui trainee和maternity_matron是两个模块里面的class,你是不是写的一个模块里

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

    order_source_name 字段所在模块没升级吧? 意思就是order_source_name 没创建到数据库

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

    @56410725
    我是写在一个模块里面了。应该没有问题的。

    我又试了两个模块里面,是继承关系,之后更新sale模块,都没问题。

    1 条回复 最后回复
    0
  • 5 离线
    5 离线
    56410725
    在 中回复了静静 最后由 编辑
    #8

    @静静 数据库里是有的,而且之前一直用着快半个月了,没出过问题,只是今天需要更新一下sale模块,就出问题了,可能问题一开始就存在,只是因为没有更新过sale模块,所以没发现

    1 条回复 最后回复
    0
  • 静静静 离线
    静静静 离线
    静静
    写于 最后由 编辑
    #9

    😒 你的模块依赖对么。

    5 H 3 条回复 最后回复
    0
  • 5 离线
    5 离线
    56410725
    在 中回复了静静 最后由 编辑
    #10

    @静静 所有用到这个字段的模块,都depends了sale模块,因为都有一个字段是Many2one('sale.order')的

    H 1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了56410725 最后由 编辑
    #11

    @56410725
    你不是应该depends你自己继承了sale.order这个model的模块吗

    1 条回复 最后回复
    0
  • 5 离线
    5 离线
    56410725
    在 中回复了静静 最后由 编辑
    #12

    @静静 多谢多谢,是依赖的问题,今天又对依赖有了新的认识,感谢

    1 条回复 最后回复
    0
  • H 离线
    H 离线
    hui
    在 中回复了静静 最后由 编辑
    #13

    @静静
    就像作者写的那样,他继承了sale.order这个模块,添加了新的字段,那么在数据库中是添加了这个字段的,所以他认为depends原来的sale模块就应该能够使用这个字段的。

    现在的问题是,必须depends继承了sale.order后的模块才能生效。

    这个在odoo中如何处理的?难道读取字段都不是从数据库中读取,是直接从模块中吗,还是什么呢?

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

    @静静
    我看了他几个报错的源码,最开始的时候是从数据库查询了的啊,只是后来related的时候,是从model里面,导致的应该是数据库跟模型里面的字段匹配不上造成的吧。

    1 条回复 最后回复
    0
  • 静静静 离线
    静静静 离线
    静静
    写于 最后由 编辑
    #15

    😒 读数据库多慢。当然是直接读python咯。升级谁,就把他定义的字段属性,写进数据库。
    应该根这种情况有点像http://blog.sina.com.cn/s/blog_bc7dee2d0102xm44.html

    1 条回复 最后回复
    0

  • 登录

  • 没有帐号? 注册

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

  • 没有帐号? 注册

  • 登录或注册以进行搜索。