odoo14学习速记笔记
误差月7分40秒
/model/ model.py
这个就是让odoo在数据库中创建一张表。__name就是数据库中创建的表单名, 然后用model.fields模块定义一些字段。也可以继承其它模块的字段。 并且通过@api语法糖,可以监听字段数据的变化,执行一些函数。
_name
- 用作该类的唯一标识,在xml文件中会用到对应起来
- 类中的_name 命名方式为 _name=模块名.任意字符,中间用点间隔 。
如模块名(即目录名)为weather
,其中py文件的类名为skyCloud
。那么_name="weather.sky"
,开头那个字符一定要和模块名对应,点号后面的无所谓。 - _name参数不允许出现驼峰式命令,如
_name="weatherSky"
_description
用于给开发者看该模块的用途,没其它什么作用。
_order
排序,_oder=“字段名 排序方式, 字段名2 排序方式…”
排序方式有正向 反向排列(英文)
desc 和 asc
_inherit
继承某个模块中的类,这样就能继承它的字段。
如_iinherit="res.company"
,或_inherit = ['portal.mixin', 'mail.thread']
.
就是继承了res模块中的conpany这个类,这样就能使用它里面的字段。
类中的子函数
@api.xxx函数的触发方式
如api.onchange(''id')
表示該id表示的元素改变时,就触发下面的函数
class app_grid(models.Model):
_name = "app.grid"
_description = "九宫格"
_order = 'sequence asc'
_check_worflow_auto = True # 是否添加工作流
_inherit = ['portal.mixin', 'mail.thread']
@api.onchange('model_id')
def onchange_model_id(self):
if self.model_id:
self.models = self.model_id.model
@api.depends("字段名")
,用来监听字段,字段值一变就会触发函数
@api.model
用于与数据库记录无关的逻辑方法,不返回数据(这个可能不可信,命名写了return)。
大佬把doContractInfo这个函数卸载xml文件的class中的。后续可以研究下
compute计算字段
/controllers
用于处理前端的请求,实际使用一般是用来调用第三方接口并返回数,使调用接口后的数据在前端页面显示。
比如页面返回的json数据,显示失败、成功等都是这里处理的
/security/ ir.model.access.csv
注意:每建立一个模块都需要在此文件中添加为该模块添加权限,主要时models_id的命名规则
models_id
- 命名规则为 model_模块名_模块文件中的类名,与_name不同,是以下划线风格。
- 指向数据库,数据库不存在会报错。(应该是创建脚手架时,数据库一起建立好的)
group_id:id
这个开发时一般都用 base.group_user
最后四个字段
对应 读 些 创建 删除
1为允许
0为不允许
/views
- 元素 menuitem可以单独创建一个文件,注意不要忘记在manifest.py中引用
/views/xx.xml
- 整个xml文件中,最先显示的放在最底下,如menuitem,按照显示顺序一次排序,最后显示的就放最顶上,manifest文件中的data也是同理。。另外可以为menuitem元素单独创建一个文件。
- id不能使用点间隔,间隔符使用下划线.因为点的前面是代表模块名
- 一个菜单写道一个xml文件中,不然后续调试会找不到跳转到哪里
- 下面的格式是定死的,
tree
上面几个元素的name都不要动 - id名字可以随便起
- model : 示例中的ri.ui.view是odoo自带的视图方式,表示使用了其视图方式
- 第一个field 中的值表示当前的模块页面的名字,也可以不写。
- 第二个field中的值对应当前数据库中的字段,也就是
_name
的值 - 第三个field中的值 表示加载的是哪种视图,可以使用tree,form,不知道为什么这里些的1
- 第四个field局势带有视图功能了。
<record id="tree_res_device" model="ir.ui.view">
<field name="name">res.device.tree</field>
<field name="model">res.device</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<tree string="列表">
<field name="name"/>
<field name="platform"/>
<field name="brand"/>
<field name="model"/>
<field name="guid"/>
<field name="user_id"/>
</tree>
</field>
</record>
-
常见的试图有 tree form kanban calendar日历 graph gantt甘特图 pivot透视表 actiyity活动,可以同时输入多个视图,以逗号间隔。
其中actiyity活动是企业版才有的 -
元素div 等只能在form里面写,不能卸载tree或record里面。form中可以添加group sheet div h1 h2等元素,其它地方并
-
field字段有个ref属性,里面添加元素id。用来点击跳转到另一个record中,展示另一个record中的字段内容。
<record id="idea_category_list2" model="ir.ui.view">
<field name="name">id.category.list2</field>
<field name="model">idea.category</field>
<field name="inherit_id" ref="id_category_list"/>
<field name="arch" type="xml">
<!-- find field description and add the field
idea_ids after it -->
<xpath expr="//field[@name='description']" position="after">
<field name="idea_ids" string="Number of ideas"/>
</xpath>
</field>
</record>
- 不要用pycharm快捷键ctrl+/来注释xml中的代码,会报错
- 字段表
知识块 知识点 描述
字段类型 fields.Char 文本
fields.Text 长文本
fields.Integar 整数
fields.Float 浮点
fields.date 日期
fields.Boolean 布尔值
关系类型 fields.One2many 一对多
fields.Many2one 多对一
fields.Many2many 多对多
fields.Selection 选择项
继承 _inherit = 'res.partner' 函数的继承
<field name="inherit_id" ref="base.view_partner_form"/> 视图的继承
视图 tree视图 列表
form视图 表单
kanban视图 看板
xml元素布局
domain domain=['|', ('teacher', '=', True), ('category_id.name', 'ilike', "Teacher")] 数据筛选
/data
用于存放初始化时用的数据,比如本来存放在/security目录中用于设置字段访问权限的xml文件,对于那些初始化就要设计访问权限的字段,可以放到/data里面
模块的更新
每次编辑完模块都要重启服务,然后在网上上更新模块。
更新后i如果报错,仔细从下往上查看报错代码,一般会显示问题位置。
多级菜单的问题
父级菜单没有写action属性,没有跳转,程序会查找它的子菜单,如果子菜单有action属性,网页上打开该模块,显示的就是那里面action的视图。
顶层的menuitem
<!-- Top menu item -->
<menuitem name="demo1" id="demo1.menu_root"/>
<!-- menu categories -->
<menuitem name="Menu 1" id="demo1.menu_1" parent="demo1.menu_root"/>
<menuitem name="Menu 2" id="demo1.menu_2" parent="demo1.menu_root"/>
<!-- actions -->
<menuitem name="List" id="demo1.menu_1_list" parent="demo1.menu_1"
action="demo1.action_window"/>
<menuitem name="Server to list" id="demo1" parent="demo1.menu_2"
action="demo1.action_server"/>
抽象模型
学习步骤i
- 学习建立表单视图
- 学习建立一对多,多对一的关系
- 学习类的继承
pycharm快捷键
格式化代码 ctrl+alt+L
通过包含关键字代码的文件和内容 find in path ctrl+shift+F
搜索文件 双击shift
many2one
ondelet属性
包是这段关系触发删除事件的时候操作
odoo账号的创建和密码设置
- odoo的login界面使用 admin登陆,密码默认也是admin。
- 点击画面中的setting进入账号管理界面,双击添加账号。
- 在选中账号后,上方的action中,有i改密码的选项
bug记录
- 更新模块后,主页面不出现模块图标。但是修改manifest文件里面的那么,app页面的图标可以更改。
解决方案就是更换浏览器