Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

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



  • 在一个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就不会报错,请教一下这是什么原因,我这么分析的对吗,应该怎么解决这种问题,traineematernity_matron不在同一模块中



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



  • This post is deleted!


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



  • @hui traineematernity_matron是两个模块里面的class,你是不是写的一个模块里



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



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

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



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



  • 😒 你的模块依赖对么。



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



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



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



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

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

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



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



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


Log in to reply