odoo V10开发文档(入门:建立网站)

1.创建模块

odoo提供scaffold命令用来快速创建模块:

odoo scaffold  

2.模块控制器

打开module name文件夹,如mymodules/academy ,编辑controllers/controllers.py,在init.py进行导入

# -*- coding: utf-8 -*-
from odoo import http

class Academy(http.Controller):
    @http.route('/academy/academy/', auth='public')
    def index(self, **kw):
        return "Hello, world"

保存,重启odoo,此处如果模块文件夹不是默认,执行的时候需要指定addon目录(当前路径相对路径或绝对路径):

odoo --addons-path addons,mymodules

在开发者模式下更新应用列表,在设置-应用右上角搜索栏中搜索academy(需去掉应用过滤)安装
,安装完成后在浏览器输入 localhost:8069/academy/academy即可看到简单的hello word页面了

3.自定义模板

odoo自己开发了一套QWeb模板引擎,修改controller让它加载自定义模板:

class Academy(http.Controller):
@http.route('/academy/academy/', auth='public')
def index(self, **kw):
    return http.request.render('academy.index', {
        'teachers': ["Diana Padilla", "Jody Caroll", "Lester Vaughn"],
    })

然后编辑template.xml,此模板在manifest.py中配置到data中加载:



    


此模板将teachers循环输出,重启odoo服务,找到academy点击升级,刷新localhost:8069/academy/academy页面会显示新的内容了

4.数据保存

  • 模型定义

编辑models/models.py

class Teachers(models.Model):
_name = 'academy.teachers'

name = fields.Char()

编辑security/ir.model.access.csv并加入manifest.py

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

此处即设置数据为对所有用户只读

所有xml和csv文件都需要在manifest内进行引入,controller和module文件需要在init内进入导入

  • 测试数据,编辑demo.xml

    
        
            Diana Padilla
        
        
            Jody Carroll
        
        
            Lester Vaughn
        
    

  • 数据读取
    修改controllers.py
class Academy(http.Controller):
    @http.route('/academy/academy/', auth='public')
    def index(self, **kw):
        Teachers = http.request.env['academy.teachers']
        return http.request.render('academy.index', {
            'teachers': Teachers.search([])
        })

修改templates.xml

  

重启odoo服务,升级academy(升级时会自动创建数据表,导入测试数据),重新打开localhost:8069/academy/academy 此时展现的数据就是数据库读取出来的了

5.模块用于网站

odoo提供了一个用于建立网站的模块,接下来测试academy用于网站中

  • 在manifest中将模块定义为website:
    'depends': ['website']
  • 在controller中指定为website:
class Academy(http.Controller):
    @http.route('/academy/academy/', auth='public', website=True)
  • 在模板中添加website layout

重启odoo并更新模块(加载template和manifest),重新进入academy页面,页面已经用了网站前端的布局

6.链接和路由

在controller中通过route()装饰器来处理请求,除了标准的URL之外,还可以接受参数型url,例:

 @http.route('/academy//', auth='public', website=True)
    def teacher(self, name):
        return '

{}

'.format(name) @http.route('/academy//', auth='public', website=True) def teacher_id(self, id): return '

{} ({})

'.format(id, type(id).__name__)

重启odoo,浏览器进入academy/test和academy/1 所显示出来的页面是不一样的,odoo还支持使用数据模型做参数

#controllers.py
@http.route('/academy//', auth='public', website=True)
    def teacher(self, teacher):
        return http.request.render('academy.biography', {
            'person': teacher
        })

#template.xml

重启odoo并升级模块,输入academy/1 查看效果

7.使模块在菜单栏可见

默认情况下,新建的模块对用户来说是不可见的,需要创建一个菜单用户才能在页面中看到

#view.xml
 
    
    Academy teachers
    academy.teachers
  

  
   
    Academy teachers: form
    academy.teachers
    
      

重启odoo并更新模块,菜单会有academy入口了,默认会展现一个列表,点进去可编辑

8.数据模型相互关联

建立一个课程表模型,每个课程需要有一个老师,课程表就需要有一个老师ID的字段来进行关联,需要建立一个一对多的关系

#models.py 添加
class Teachers(models.Model):
    _name = 'academy.teachers'

    name = fields.Char()
    biography = fields.Html()

    course_ids = fields.One2many('academy.courses', 'teacher_id', string="Courses")
    
class Courses(models.Model):
    _name = 'academy.courses'

    name = fields.Char()
    teacher_id = fields.Many2one('academy.teachers', string="Teacher")

#ir.model.access.csv 添加
access_academy_courses,access_academy_courses,model_academy_courses,,1,0,0,0

#view.xml 更新

   
    Academy teachers: form
    academy.teachers
    
      
Academy courses academy.courses Academy courses: search academy.courses Academy courses: list academy.courses Academy courses: form academy.courses

此时重启odoo并更新模块,进入academy,点击菜单的course,看看会有什么

9.odoo聊天系统

odoo自带聊天系统,只需要在models里引入mail.thread,添加messageid到表单中即可,下面为课程添加讨论功能

#__manifest__.py 
'depends': ['base','mail'],

#models.py
class Courses(models.Model):
    _name = 'academy.courses'
    _inherit = 'mail.thread'

    name = fields.Char()
    teacher_id = fields.Many2one('academy.teachers', string="Teacher")

#views.xml

10.odoo交易功能

odoo提供了website_sales的交易模块,只需要做简单的修改就可以实现商品发布(安装电子商务模块)

#__manifest__.py
'depends': ['website_sale'],

'data': [
        'security/ir.model.access.csv',
        'views/views.xml',
        'views/templates.xml',
        'data/data.xml' #此处为新增
    ],
    
#data/data.xml 新增


  
    Courses
    
  



#demo.xml

        老师1号


    Course 0
    
    
    True
    0
    service


    Course 1
    
    
    True
    0
    service


    Course 2
    
    
    True
    0
    service


#models.py
class Teachers(models.Model):
    _name = 'academy.teachers'

    name = fields.Char()
    biography = fields.Html()

    course_ids = fields.One2many('product.template', 'teacher_id', string="Courses")

class Courses(models.Model):
    _inherit = 'product.template'

    name = fields.Char()
    teacher_id = fields.Many2one('academy.teachers', string="Teacher")
    
#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

#views.xml 去掉前面步骤创建的课程视图
=

Academy teachers: form
academy.teachers

  

重启odoo,打开网站-商店,发现有添加的课程了


内容发布自http://www.dingyii.cn,转载请注明出处

你可能感兴趣的:(odoo V10开发文档(入门:建立网站))