Odoo13创建一个基本模块

1.创建模块

  1. 创建模块目录 ,在根目录下创建模块目录,此处为my-modules
  2. 创建模块 ,在Pycharm的命令行终端使用Odoo的scaffold命令设置一个基本模块,此处为Academy
python odoo-bin scaffold Academy my-modules

没有错误信息则创建成功,可以查看my-modules目录下多了Academy模块
在这里插入图片描述

2.安装模块

  1. 添加模块路径 ,在odoo.conf下的addons_path参数值中添加新的模块目录键值对addons_path=./addons,./my-modules,如果使用命令启动,则为–addons-path addons,my-modules
  2. 启动服务 ,在Pycharm中启动或使用命令启动,然后通过http://localhost:8069/登录访问Odoo
  3. 激活开发者模式 ,右击左上角,打开设置页面,拉到最后,看到开发者工具,激活开发者模式
  4. 安装模块 ,右击左上角,打开应用页面,此时在开发者模式中,能看到顶部菜单多了很多选项,点击“刷新本地模块列表”,点击更新。在搜索框中移除“应用”搜索关键字,输入Academy,搜索Academy模块,然后点击安装,完成Academy模块安装在这里插入图片描述

3.Hello, world

  1. 编写接口 ,在my-modules/academy/controllers/controllers.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"
  1. 访问接口 ,重启Odoo服务,即可使用地址访问接口并返回Hello, world
    http://localhost:8069/academy/academy/

4.模板文件

  1. 模板文件 ,使用模板文件显示Teachers数据,在模板文件my-modules/academy/view/template.xml中添加内容
<odoo>
    <template id="index">
        <title>Academy</title>
        <t t-foreach="teachers" t-as="teacher">
          <p><t t-esc="teacher"/></p>
        </t>
    </template>
</odoo>
  1. 修改接口 ,修改my-modules/academy/controllers/controllers.py文件的接口,主要是index方法,其它接口只是用于测试,非必要
# -*- coding: utf-8 -*-
from odoo import http
import json
from odoo import api
import logging
_logger = logging.getLogger(__name__)

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"],
        })

    # # 返回字符串
    # @http.route('/academy/hello/', auth='public')
    # def hello(self, **kw):
    #     name = kw.get('name')
    #     if name:
    #         return 'Hello ' + name
    #     return 'Hello World'
    # 
    # # 返回json数据
    # @http.route('/academy/getTeachers', type='http', auth='public')
    # def getTeachers(self):
    #     list  = ["Diana Padilla", "Jody Caroll", "Lester Vaughn"]
    #     dic = {}
    #     dic['teachers'] = list
    #     return json.dumps(dic)
    # 
    # # 接收json参数
    # # 参数格式data = {"params": dict(key="value")}
    # @http.route(['/academy/getTeacherByName'], type='json', auth='public', methods=['POST'])
    # def getTeacherByName(self, **kw):
    #     _logger.info("window下可以使用curl测试命令:")
    #     _logger.info("curl http://localhost:8069/openacademy/getSessionById -X POST -d \"{\\\"params\\\":{\\\"name\\\": \\\"Manson\\\"}}\" --header \"Content-Type: application/json\"")
    #     _logger.info(kw)
    #     teachers = ["Diana Padilla", "Jody Caroll", "Lester Vaughn"]
    #     name= kw.get('name', False)
    #     if name:
    #         teachers = [name]
    #     return json.dumps(teachers)
    # 
    # # 查询数据库
    # @http.route('/academy/getTeacherName/', auth='public')
    # def getTeacherName(self, **kw):
    #     sql = "select name from academy_teachers"
    #     # 方式一,直接查询数据库
    #     db = psycopg2.connect(database="odoo", user="root", password="admin", host="127.0.0.1", port="5432")
    #     vals = db.cursor()
    #     vals.execute(sql)
    #     dicts = vals.fetchall()
    #     # 方式二,使用api查询
    #     http.request.env.cr.execute(sql)
    #     dicts = http.request.env.cr.dictfetchall()
    #     return json.dumps(dicts)
  1. 更新模块 ,修改完成后重启服务并更新Academy模块,需要在应用中搜索Academy模块并更新
    在这里插入图片描述
  2. 访问接口 ,此时使用地址访问接口并返回模板数据
    http://localhost:8069/academy/academy/

5.存储数据

  1. 创建模型 ,修改my-modules/academy/models/models.py文件,添加名为Teachers的模型
# -*- coding: utf-8 -*-

from odoo import models, fields, api

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

    name = fields.Char()
  1. 添加权限 ,修改my-modules/academy/__manifest__.py,将权限文件引入,主要是取消security/ir.model.access.csv的注释
    在这里插入图片描述
  2. 修改权限 ,修改my-modules/academy/security/ir.model.access.csv,添加对teachers模型的读权限
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
  1. 添加样例数据 ,修改my-modules/academy/demo/demo.xml,添加一些teachers模型的样例数据
<odoo>
    <data>
        <record id="padilla" model="academy.teachers">
            <field name="name">Diana Padilla</field>
        </record>
        <record id="carroll" model="academy.teachers">
            <field name="name">Jody Carroll</field>
        </record>
        <record id="vaughn" model="academy.teachers">
            <field name="name">Lester Vaughn</field>
        </record>
    </data>
</odoo>
  1. 修改接口 ,修改controller.py文件的接口,以查询teachers模型的数据
# -*- coding: utf-8 -*-
from odoo import http

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([])
        })
  1. 修改模板 ,修改template.xml文件,以输出teachers模型的数据
<odoo>
    <template id="index">
        <title>Academy</title>
        <t t-foreach="teachers" t-as="teacher">
          <p><t t-esc="teacher.id"/> <t t-esc="teacher.name"/></p>
        </t>
    </template>
</odoo>
  1. 查看结果 ,启动服务并更新模块,然后使用地址访问接口
    http://localhost:8069/academy/academy/
    在这里插入图片描述
    此时,已经在Postgresql中创建了数据库表academy_teachers并插入了demo中定义的记录
    在这里插入图片描述

6.访问模块

  1. 创建菜单 ,为模块创建菜单,修改my-modules/academy/view/views.xml
<odoo>

  <record id="action_academy_teachers" model="ir.actions.act_window">
    <field name="name">Academy teachers</field>
    <field name="res_model">academy.teachers</field>
  </record>

  <menuitem sequence="0" id="menu_academy" name="Academy"/>
  <menuitem id="menu_academy_content" parent="menu_academy"
            name="Academy Content"/>
  <menuitem id="menu_academy_content_teachers"
            parent="menu_academy_content"
            action="action_academy_teachers"/>
</odoo>
  1. 查看结果 ,启动服务并更新模块,然后就可以看到Academy模块的菜单并访问其内容
    在这里插入图片描述
    现在可以看到只可以查看Teachers模块的数据,如果想要增删改查,则修改权限文件即可,将文件中的0改为1,然后重启并更新模块,再次访问即可看到多出了操作增删改的按钮
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,1,1,1

在这里插入图片描述

6.其它相关文章

1.Odoo13创建报表
https://blog.csdn.net/u010520912/article/details/103497489

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值