我无法安装创建的模块,它会产生一系列错误

问题描述 投票:0回答:1

我正在创建一个Odoo模块,它具有医生,专业和约会,树状视图和表单视图。我已经按照老师给定的模板完成了此操作,但安装时却出现了一系列错误。这些是错误:

Error:
Odoo Server Error

Traceback (most recent call last):
  File "/opt/odoo/odoo/odoo/http.py", line 656, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo/odoo/http.py", line 314, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/opt/odoo/odoo/odoo/http.py", line 698, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo/odoo/http.py", line 346, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 941, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo/odoo/http.py", line 519, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 966, in call_button
    action = self._call_kw(model, method, args, {})
  File "/opt/odoo/odoo/addons/web/controllers/main.py", line 954, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo/odoo/api.py", line 759, in call_kw
    return _call_kw_multi(method, model, args, kwargs)
  File "/opt/odoo/odoo/odoo/api.py", line 746, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-61>", line 2, in button_immediate_install
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
    return method(self, *args, **kwargs)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_module.py", line 445, in button_immediate_install
    return self._button_immediate_function(type(self).button_install)
  File "/opt/odoo/odoo/odoo/addons/base/models/ir_module.py", line 561, in _button_immediate_function
    modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 86, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 421, in load_modules
    loaded_modules, update_module, models_to_check)
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 313, in load_marked_modules
    perform_checks=perform_checks, models_to_check=models_to_check
  File "/opt/odoo/odoo/odoo/modules/loading.py", line 194, in load_module_graph
    registry.setup_models(cr)
  File "/opt/odoo/odoo/odoo/modules/registry.py", line 267, in setup_models
    model._setup_fields()
  File "/opt/odoo/odoo/odoo/models.py", line 2627, in _setup_fields
    field.setup_full(self)
  File "/opt/odoo/odoo/odoo/fields.py", line 502, in setup_full
    self._setup_regular_full(model)
  File "/opt/odoo/odoo/odoo/fields.py", line 2428, in _setup_regular_full
    invf = comodel._fields[self.inverse_name]
KeyError: 'medico_citas'

这些是不同模型的类:

# -*- coding: utf-8 -*-

from odoo import models, fields, api

# class hospital1(models.Model):
#     _name = 'hospital.hospital'

#     name = fields.Char()
#     value = fields.Integer()
#     value2 = fields.Float(compute="_value_pc", store=True)
#     description = fields.Text()
#
#     @api.depends('value')
#     def _value_pc(self):
#         self.value2 = float(self.value) / 100
class medicos(models.Model):
    # nombre del modelo
    __name = 'hospital.medicos'

    name = fields.Char(string="Nombre", required=True,
                       size=40, help="Introduzca el nombre")
    domicilio = fields.Char(string="domicilio", required=True,
         size=40, help="Introduzca el domicilio")
    telefono = fields.Integer(
        string="telefono", required=True, size=9, help="Introduzca el telefono")
    fecha = fields.Date(string="Fecha ingreso", required=True)
    especialidad_medico = fields.Many2one(
        'hospital.especialidad', string="Especialidad")
    citas_medico = fields.One2many(
        'hospital.cita', string="Citas del medico")
 citas_medico = fields.One2many(
        "hospital.cita", "medico_citas", string="Citas del medico")

class especialidad (models.Model):
    # nombre del modelo
    __name = 'hospital.especilidad'

name = fields.Char(string="Nombre", required=True,
                   size=40, help="Introduzca la especialidad")
consultas = fields.selections
    [('1', 'consulta 1'), ('2', 'consulta 2'), ('3', 'consulta 3'), ('4', 'consulta 4'),
    ('5', 'consulta 5')]
medico_esp = fields.One2many(
    'hospital.medicos', 'especialidad_medico', string="Especialidad")
citas_esp = fields.One2many(
        "hospital.cita", "especialidad_cita", string="Citas del medico")

class citas (models.Model):
    # nombre del modelo
    __name = 'hospital.citas'
    paciente = fields.Char(string="Nombre", required=True,
                           size=40, help="Introduzca del paciente")
    fecha_cita = fields.Datetime(string="Fecha de la cita", required=True)
    especialidad_cita = fields.Many2one(
        'hospital.especialidad', string="Especialidad")
    medico_cita = fields.Many2one(
        'hospital.medico', string="Medico")
python odoo-10
1个回答
0
投票

您正在获取字段“ medico_citas”的KeyError,这是从您的“ citas_medico”字段定义中获得的:

 citas_medico = fields.One2many(
        "hospital.cita", "medico_citas", string="Citas del medico")

One2Many字段的强制语法是

field_name = fields.One2many(comodel_name, inverse_name, string)

这里

     comodel_name = name of the target model
     inverse_name = name of the inverse Many2one field in comodel_name

请检查Odoo ORM API doc

这里的错误是因为“ hospital.cita”对象中没有“ medico_citas”字段。

请通过ORM API文档完整检查您的代码。还有一件事,在类中不需要两个下划线来定义名称

_name = 'a.model.name'

更正例如:

更改此:-

 citas_medico = fields.One2many(
        "hospital.cita", "medico_citas", string="Citas del medico")

至->

 citas_medico = fields.One2many(
        "hospital.citas", "medico_cita", string="Citas del medico")

还有这个:-

medico_cita = fields.Many2one(
    'hospital.medico', string="Medico")

至->

medico_cita = fields.Many2one(
    'hospital.medicos', string="Medico")

请检查这样的每个关系字段。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.