本文主要是学习Odoo官方文档 Building a Website文档中的一些个人理解以及一些问题和解决办法。用来顽固下学习,部分理解可能因为水平缘故会有点偏差,如果有错误,欢迎指出共同学习。
Creating a basic module
- 任务通过建立模块来执行的
- 通过新增或者修改现有的模块可以定制odoo的特性。
$ ./odoo-bin scaffold Academy my-modules
这个命令自动创建了一个my-modules的目录(directory),里面包含着academy模块(models)。
- 目录可以是已经存在的,但是模块名必须唯一。
A demonstration module
通过以下命令启动odoo服务器
$ ./odoo-bin --addons-path addons,my-modules
这条命令会把 addons和my-modules加到path里面去。
To the browser
- Controllers解析处理浏览器发来的请求(request),并返回响应
Templates
Odoo允许使用任意python下的模板系统,但是odoo自己附带了一个模板系统QWeb.
模板xml文件要在
__manifest__.py
文件里面注册.
当模块有更新时,需要重启Odoo, 然后在网页中通过点击settings,然后在列表里面去掉apps标签,再搜索academy,点击upgrade按钮(与官方文档中描述不同.个人版本为10.0).
或者
通过运行$ odoo-bin --addons-path addons,my-modules -d academy -u academy
命令在重启时候自动更新.
Storing data in Odoo
Odoo 模型映射到数据库的表.
通过设置
'security/ir.model.access.csv'
来为模型增加访问权限控制
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_academy_teachers,access_academy_teachers,model_academy_teachers,,1,0,0,0
在这段代码中,第一行分别列出了模型的属性,以及访问权限 读/写/新建/删除.
第二行中需要注意的是group_id:id留空了,这代表这个访问控制的对象是全部用户.
-note : 数据文件(Data files, XML或者CSV格式的)需要添加到__manifest__
里面. python文件(models和controllers)不需要添加到那个文件里面,但是需要被init.py文件引用.
-warning: 管理员用户绕过访问控制,即使未授予访问权限,他们也可以访问所有模型.
Demonstration data
数据文件可用于演示和非演示数据。演示数据仅以“演示模式”加载,可用于流测试和演示,非演示数据始终加载并用作初始系统设置.
使用演示数据只是为了测试.
Accessing the data
-这里使用了一个ORM API里面的search()方法.
Website support
- 添加website作为academy的依赖.
- 在controller的route中增加website=true标识,这在请求对象中增加新标识,允许在模板中使用website布局.
URLs and routing
controller方法通过关键字 route()
装饰器与路由相关联,路由字符串和多个属性来定制其行为或安全性。
- Odoo提供了一个称为模型的额外转换器,当给定它们的id时直接提供记录
Field edition
对于记录字段,模板可以使用特殊的t-field指令,该指令允许从网站编辑字段内容。
t-field可以选择显示格式.
Administration and ERP integration
默认情况下,Odoo模型基本上是用户不可见的。要使其可见,它必须通过一个操作,通常通过菜单来显示。
模型关系 多对一(many2one) 一对多(one2many).
Discussions and notifications
在这章中按照官方教程无法运行.会报错
'''
TypeError: Model 'academy.courses' inherits from non-existing model 'mail.thread'.
'''
不知道个人问题还是官方教程疏漏了. 根据报错原因个人认为可能里面_inherit = 'mail.thread'
需要mail模块.但是直接在depends里面添加会提示找不到这个模块.
后来在网页apps里面添加之后再的depends添加就可以了.这是比较费解的地方.
Selling courses
官网有些地方给的不是很详细,如果不明白哪里改动了可以查看源码目录下doc里面的更改记录.
但是跟着官方最后重启Odoo时会报错
ParseError: "External ID not found in the system: website_sale.categ_others" while parsing /odoo/odoo-server/addons/academy/data.xml:4, near<record model="product.public.category" id="category_courses">```
最后参考这个解决了. [[Odoo 9.0 Website tutorial - Selling Courses](https://www.odoo.com/zh_CN/forum/help-1/question/odoo-9-0-website-tutorial-selling-courses-100267)](https://www.odoo.com/zh_CN/forum/help-1/question/odoo-9-0-website-tutorial-selling-courses-100267)
解决的办法是
In data.xml file:
remove ref="website_sale.categ_others"