2017-05-08 112 views
0

我在Odoo 10上工作了几个月后,我制作了一个依赖于某些Odoo模块的自定义模块。 今天我想创建一个用户手册,因为我的工作几乎完成了,所以我决定创建一个新的数据库,从零开始,并能够一步一步解释如何安装模块以及它如何工作... The问题是,我得到这个错误:Odoo 10安装模块时出现KeyError

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完全忽略了它。 也许某些东西仍然在内存中,并且它使用相同的文件,所以我们终于通过杀死所有进程来设法解决问题。 我希望这仍然可以帮助。

+0

你在o2m领域使用过吗? – Cherif

+0

不,我只在Many2one字段 – Isariamkia

+0

中使用它,只是创建这个字段不会导致这个错误,你在哪里使用它。 – Cherif

回答

0

这里是我解决了这个问题,它不是一个很好的解决方案,但它是我们发现的唯一途径:

所以经过一段时间搜索的问题,我的同事,我们 没有真正找到什么问题。我们假设Odoo在重新启动服务时没有重新加载 文件,因为我们试图在文件中添加一些 错误代码,并且Odoo完全忽略它。也许 仍然在内存中,并保持使用相同的文件,所以我们 设法最终通过杀死所有进程来解决问题。我希望这可以帮助。

+0

我想你在哪里同时运行odoo的两个实例。 – Cherif