首页 > 解决方案 > 我无法安装创建的模块它给出了一系列错误

问题描述

我正在创建一个 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 179, in load_module_graph
    load_openerp_module(package.name)
  File "/opt/odoo/odoo/odoo/modules/module.py", line 368, in load_openerp_module
    __import__('odoo.addons.' + module_name)
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
  File "/opt/odoo/odoo/odoo/modules/module.py", line 82, in load_module
    exec(open(modfile, 'rb').read(), new_mod.__dict__)
  File "<string>", line 4, in <module>
  File "/etc/odoo/custom-ADDONS/hospital/models/__init__.py", line 3, in <module>
    from . import models
  File "/etc/odoo/custom-ADDONS/hospital/models/models.py", line 40, in <module>
    consultas = fields.selections(
AttributeError: module 'odoo.fields' has no attribute 'selections'
```

这些是不同模型的类别:

# -*- 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.citas", "medico_cita", 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.citas", "especialidad_citas", 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.medicos', string="Medico")

这就是我所拥有的,根据您告诉我的内容以及 odoo 程序给我的错误进行了修改。

标签: pythonodoo-10

解决方案


您收到字段“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 文档

这里的错误是因为您的“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")

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

希望这可以帮助。


推荐阅读