【问题标题】:Odoo 10 KeyError when installing module安装模块时出现Odoo 10 KeyError
【发布时间】:2017-05-08 08:19:56
【问题描述】:

几个月以来我一直在开发 Odoo 10,我制作了一个依赖于 Odoo 一些模块的自定义模块。 今天想写一个用户手册,因为我的工作快完成了,所以我决定创建一个新的数据库,从零开始,并且能够一步一步地解释如何安装模块以及它是如何工作的...... 问题是,我收到了这个错误:

Odoo Server Error
Traceback (most recent call last):
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 638, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 675, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 331, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo-10.0/odoo/service/model.py", line 119, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 324, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo-10.0/odoo/http.py", line 504, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo-10.0/addons/web/controllers/main.py", line 882, in call_button
    action = self._call_kw(model, method, args, {})
  File "/opt/odoo/odoo-10.0/addons/web/controllers/main.py", line 870, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo-10.0/odoo/api.py", line 681, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo-10.0/odoo/api.py", line 672, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/odoo-10.0/odoo/addons/base/module/module.py", line 410, in button_immediate_install
    return self._button_immediate_function(type(self).button_install)
  File "/opt/odoo/odoo-10.0/odoo/addons/base/module/module.py", line 484, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/opt/odoo/odoo-10.0/odoo/modules/registry.py", line 78, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/opt/odoo/odoo-10.0/odoo/modules/loading.py", line 339, in load_modules
    loaded_modules, update_module)
  File "/opt/odoo/odoo-10.0/odoo/modules/loading.py", line 237, in load_marked_modules
    loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
  File "/opt/odoo/odoo-10.0/odoo/modules/loading.py", line 135, in load_module_graph
    registry.setup_models(cr, partial=True)
  File "/opt/odoo/odoo-10.0/odoo/modules/registry.py", line 293, in setup_models
    model._setup_fields(partial)
  File "/opt/odoo/odoo-10.0/odoo/models.py", line 2836, in _setup_fields
    field.setup_full(self)
  File "/opt/odoo/odoo-10.0/odoo/fields.py", line 491, in setup_full
    self._setup_related_full(model)
  File "/opt/odoo/odoo-10.0/odoo/fields.py", line 528, in _setup_related_full
    field = target._fields[name]
KeyError: 'workorder_id'

现在我不确定,但是当 Odoo 应该导入我的文件时似乎存在问题,因为在数据库中我的表根本没有创建,所以我不知道它们是否因此而没有创建错误或者如果此错误是因为我的表不在数据库中。 无论如何,我试图评论这个 workorder_id 出现的位置,但它没有改变任何东西,错误仍然存​​在,我尝试一一评论试图重新启动服务器,但没有任何改变。 我看过很多他们谈论继承的话题,但我不认为是这样,workorder_id 是我自己的字段,它在我自己的模型中使用。

以下是使用此字段的模型:

class ControlPart(models.Model):
    """
        Modèle pour la vue de la pièce contrôlée.
    """
    _name = 'spc.control.part'

    name                            = fields.Char(string='Piece name')
    starting_date                   = fields.Date(string='Starting date')
    ending_date                     = fields.Date(string='Ending date')
    basket_position                 = fields.Char(string='Basket position')
    piece_number                    = fields.Integer(string='Piece number')
    note                            = fields.Text(string='Notes')
#     operation_workorder_id          = fields.Many2one('spc.fabrication.order', string='Fabrication order', 
#                                                       related='operation_id.workorder_id')
#     operation_workorder_id_product_id  = fields.Many2one('product.product', string='Product code', 
#                                                      related='operation_id.workorder_id.product_id')

    operation_id        = fields.Many2one('spc.operation', ondelete='restrict', string='Operation') 
    person_id           = fields.Many2one('spc.person', ondelete='restrict', string='Operator')
    workcenter_id       = fields.Many2one('mrp.workcenter', ondelete='restrict', string='Workcenter code')
    control_measure_ids = fields.One2many('spc.control.measure', 'control_part_id', ondelete='restrict', string='Measures')

class Operation (models.Model):
    """
        Modèle pour la vue des opérations.
    """
    _name = 'spc.operation'

    name            = fields.Char(string='Operation name')
    number          = fields.Integer(string='Number')
    pcerp_number    = fields.Char(string='Pro Concept number')

    #workorder_id    = fields.Many2one('spc.fabrication.order', ondelete='restrict', string='Fabrication Order')  

感谢您的宝贵时间!

编辑: 因此,经过一段时间寻找问题后,与我的同事并没有真正找到问题所在。我们假设 Odoo 在服务重新启动时没有重新加载文件,因为我们试图在文件中放入一些错误的代码,而 Odoo 只是忽略了它。 也许内存中还有一些东西,它一直在使用相同的文件,所以我们最终通过杀死所有进程来解决问题。 我希望这仍然可以提供帮助。

【问题讨论】:

  • 你在o2m领域用过吗?
  • 不,我只在 Many2one 字段中使用它
  • 只创建这个字段不会导致这个错误你在哪里使用它。
  • 我在原始帖子和视图中放置的这些模型中使用了它,我也在视图中对其进行了评论,但没有任何改变。这就是我不明白的地方,我没有在其他地方使用它,我再次阅读了我所有的模型以尝试找到它,但它只存在于这两个模型和我的视图中
  • 你评论了它的所有用法吗?仍然出现此错误,这意味着您正在使用它可能是在安装此模型之前安装的模型中

标签: openerp odoo-10


【解决方案1】:

这是我解决问题的方法,这不是一个很好的解决方案,但这是我们找到的唯一方法:

所以在寻找问题一段时间后,我们和我的同事一起 并没有真正发现哪里出了问题。我们假设 Odoo 没有重新加载 重新启动服务时的文件,因为我们试图放一些 文件中的代码错误,Odoo 直接忽略了它。也许是什么 仍然在内存中,它一直使用相同的文件,所以我们 最终通过杀死所有进程设法解决了问题。我 希望这仍然可以提供帮助。

【讨论】:

  • 我想你在哪里同时运行两个 odoo 实例。
  • service odoo force-reload
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多