以下操作均在windows环境下
版本:odoo11

一.模块搭建

python odoo-bin scaffold 模块名 模块所在的文件名
python odoo-bin scaffold demo my-modules
看下图就搭建好了一个模块,但这个模块在系统应用中还没法看到的
下面讲一下模块组织结构:

  1. controllers
    需要自定义路由在该文件里面配置
  2. models
    在该文件里面创建模型,就是我们数据库字段,以及处理逻辑交互
  3. security
    配置权限
  4. views
    在这个文件写前端视图页面
  5. manifest.py
    在这个文件里配置模型名,配置模型依赖,以及前端xml文件都要配置到这个文件

    接下来我们需要到odoo.conf文件里配置addons_path如下图,(odoo.conf在debian文件里面)

    现在到系统里面激活开发者模式,在应用中更行模块,再搜索模块名就可以看到我们搭建的模块啦,点击安装但页面上什么都不显示,不要着急这是因为还没有开发,模块里面目前没有任何内容

二.开发

首先在models文件夹下创建一个demo.py,把demo.py引入同目录下的_init_.py里面,回到demo.py建一个数据模型demo,
_name: 模型名,其他模型需要调用某个模型时需要用到
_inherit :继承,继承某个模型的字段
设置字段使用fields:
1.字段基本类型:
char: 字符
Boolean: 布尔 b = fields.Boolean(string=“布尔”,require=True)
Integer: 整型 i = fields.Integer()
Float: 浮点 f = fields.Float()
Selection: 下拉选择 s = fields.Selection()
Date: 日期 YY-DD-MM d = fields.Date()
Datetime: 时间 YY-DD-MM hh: mm: ss
Html: 富文本编辑
Text: 文本
Binary: 上传保存图片、视频、文件、附件等,Odoo底层对该类型字段的容量作了限制,最多能容纳20M内容
2.关联字段类型
many2one: 多对一,关联对象的name user_id= fields.many2one(‘模型名’,string=“标签名”,domian=[()], )
one2many: 一对多
many2many: 多对多

demo.py
# -*- coding: utf-8 -*-

from odoo import models, fields, api

class demo(models.Model):
    _name="my.demo"

    name = fields.Char(string="姓名")
    value= fields.Integer(string="值")

xml中视图创建(xml一定要引入__manifest__.py文件里面)

demo.xml
<odoo>
    <data>
        <!--odoo里面有三个视图分别为tree视图显示表格,search视图搜索,以及form视图表单,详情展示-->
        <!--每个视图的id必须以模块名作为开头否则报错-->
        <!--tree视图-->
        <record model="ir.ui.view" id="demo.list_demo">
          <field name="name">demo list</field><!--这个可以随便填但不可以太长否则也会报错-->
          <field name="model">my.demo</field><!--demo.py里面设置的模型名_name-->
          <field name="arch" type="xml">
            <tree>
              <field name="name"/>
              <field name="value"/>
            </tree>
          </field>
        </record>

        <!--自定义的form视图,可以根据自己需要添加字段,或布局,如果不写系统会使用模型中的字段自动建立一个from视图-->
        <record id="demo_form_view" model="ir.ui.view">
            <field name="name">my.demo.form</field>
            <field name="model">my.demo</field>
            <field name="arch" type="xml">
                <form string="新建">
                    <sheet>
                      <group>
                          <field name="name"/>
                      </group>
                      <notebook>
                          <page string="page1">
                          </page>
                          <page string="page2">
                          </page>
                      </notebook>
                    </sheet>
                </form>
            </field>
        </record>

        <!--search视图-->
        <record model="ir.ui.view" id="demo_note_search">
          <field name="name">查询</field>
          <field name="model">my.demo</field>
          <field name="arch" type="xml">
            <search string="查询">
              <!-- 可搜索的内容 -->
              <field name="name"/>
            </search>
          </field>
        </record>

        <!--页面动作各种视图切换在这里可以设置上下文context在里面可以做编辑创建导入按钮的隐藏,页面数据查询也是在这里-->
        <record model="ir.actions.act_window" id="demo_action_contract">
          <field name="name">类似面包屑显示</field>
          <field name="res_model">my.demo</field>
          <field name="view_type">form</field>
          <field name="view_mode">form,tree</field>
          <field name="domain">[('name', '=', '张三')]</field><!--在my.demo的数据模型中过滤出name为张三的数据-->
          <!--指定视图,有时候会遇到同一个模型要显示不同字段的情况,比较复杂的时候可以写多个视图在这儿来指定-->
          <field name="view_ids" eval="[(5, 0, 0),
            (0, 0, {'view_mode': 'tree', 'view_id': ref('demo.list_demo')}),
            (0, 0, {'view_mode': 'form', 'view_id': ref('demo_form_view')}),
            (0, 0, {'view_mode': 'kanban'})]"/>
        <field name="help" type="html">  <!--在没有数据的情况下显示的提示文案-->
            <p class="oe_view_nocontent_create">
                点击创建申请
            </p>
        </field>
        </record>



        <!--菜单导航设置-->
        <menuitem name="demo" id="demo.menu_root"/> <!--显示在页面的顶部,后面的子菜单显示在侧边栏-->
        <menuitem name="一级菜单" parent="demo.menu_root" id="demo.menu_first"/> <!--每一级菜单关联使用parent属性值为上一级菜单的id-->
        <menuitem name="一级子菜单" parent="demo.menu_first" id="demo.menu_first_child" action="demo_action_contract"/><!--action关联该菜单栏对应的动作视图-->
    </data>
</odoo>

页面效果展示

tree和search视图

odoo怎么下载python依赖_odoo怎么下载python依赖


form视图

odoo怎么下载python依赖_odoo怎么下载python依赖_02