版本12和更低版本之间的__init__.py功能差异

时间:2019-05-03 14:33:24

标签: odoo odoo-12

自v10以来,我一直在使用Odoo,在每个自定义模块上,我都使用 init .py导入python手册中所述的models和controllers文件夹。

from . import models
from . import controllers

在v12中,不是从文件夹内部读取信息,说找不到模型,但是如果我将文件移动到根模块文件夹中并导入文件,它将起作用!

初始化 .py 根模块文件夹

from . import models
from . import controllers

初始化 .py模型文件夹

from . import mymodel

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这与python版本有关。由于Odoo 10用户使用python 2,并且从Odoo版本11开始使用python3。

在Python 3中,包内的隐式相对导入不再可用-仅支持绝对导入和显式相对导入。此外,仅在模块级代码中允许使用星号导入(例如,从x import *导入)。因此,在Odoo中,您必须像这样导入模型。

answer

答案 1 :(得分:1)

Odoo版本12:示例addon文件夹称为addon1。通常,此Addon1位于addon文件夹中。

在addon1文件夹中: 您的init文件必须重命名为双下划线 例如

__init__.py

您按照您提到的方式导入(请注意,编码:第一行中为utf-8行)

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

from . import controllers
from . import models

在addon1文件夹中,有一个名为models的文件夹(如上所述)。 在models文件夹中,有您的init文件,必须将其重命名为双下划线 例如

__init__.py 

在该文件中,导入您的models文件夹中的python文件(第一行包含该编码行)

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

from . import models
from . import mymodel

[因此您的mymodel.py文件位于您创建的文件文件夹models内

在您的models文件夹中,您需要像这样导入python文件models.py(例如mymodel.py)

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

from odoo import models, fields, api

以下有关odoo 12安全功能的其他信息:
odoo 12具有一个称为文件夹安全性的新安全性文件夹,其中的文件是 ir.model.acces.csv-如果要在新菜单中查看模型,则需要将其添加到安全性中 例如

access_classname_unique,addon1.addon1,model_classname,,1,1,1,1

model_classname:如果您的类名称是_name =“ mymodel.category”(用_代替),则将成为model_mymodel.category 例如

access_mymodel_category,addon1.addon1,model_classname,,1,1,1,1