zoukankan      html  css  js  c++  java
  • odoo开发独立模块

    模块基本目录

    model下的__init__.py要把model文件import出来要不然会报找不到模型错误

    from . import epidemic_record

    模块根路径下面的__init__.py要把modelimport出来要不然会报找不到模型错误

    from . import model

    各个文件的内容

    配置文件:__manifest__.py 
    # -*- coding: utf-8 -*-
    # Part of Odoo. See LICENSE file for full copyright and licensing details.
    {
        'name' : '疫情记录', # 模块名
        'version' : '1.0', # 模块版本
        'summary': '疫情记录', # 模块简介
        'sequence': 1, # 模块排序
        'description': """
            疫情记录
            """, # 模块介绍
        'author':'til', # 模块作者
        'website':'til', # 模块站点
    
    
    
        'data': [
            'views/epidemic_record_view.xml',
            'security/ir.model.access.csv'
        ], # 模块用的到数据 视图、权限等
        'application': True, # 是否作为独立的app存在
    
    }

    model : epidemic_record.py

    from odoo import api, fields, models
    
    
    class EpidemicRecord(models.Model):
        _name = 'epidemic.record' # 表名
        name = fields.Char(string='姓名') # string是用于前端显示的名字
        date = fields.Date(string='确诊日期')
        state = fields.Char(string='')
        city = fields.Char(string='')
        county = fields.Char(string='区/街道')
        street = fields.Char(string='具体地址')
        ill_type = fields.Char(string='感染方式')
        within_or_abroad = fields.Selection([('within', '境内'), ('abroad', '境外')],string='境内/境外感染') # 枚举类型
        is_ill = fields.Boolean(string='是否确诊')
        begin_lsolation_date = fields.Date(string='起始隔离时间')
        lsolation_mode = fields.Selection([('home','居家隔离'),('focus','集中隔离')],string='隔离方式')
        create_user_id = fields.Many2one('res.users',string='填报人',default=lambda self:self.env.uid) # 外键关联,default是默认内容,这个函数的意思是默认值为当前登录用户
        note = fields.Text(string='说明')

    权限配置:ir.model.access.csv

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_epidemic_record_group_user,epidemic.record,model_epidemic_record,base.group_user,1,1,1,1
    id:权限ID,自定义,不能重复
    name:权限名称,自定义
    model_id:id:model_模型名称(注意把“.”全部换成“_”,否则会报错)
    group_id:id 组名称 (模块.用户组名)
    perm_read:读权限,1表示有权限,0表示没有权限
    perm_write:写权限,1表示有权限,0表示没有权限
    perm_create:新建权限,1表示有权限,0表示没有权限
    perm_unlink:删除权限,1表示有权限,0表示没有权限

    视图配置:epidemic_record_view.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <odoo>
    <!--   表格(tree)内容开始 id自定义 model只能写这个-->
        <record id="epidemic_record_tree_view" model="ir.ui.view">
    <!--        设置名称-->
            <field name="name">疫情记录</field>
    <!--        设置模型-->
            <field name="model">epidemic.record</field>
    <!--        需要显示的字段-->
            <field name="arch" type="xml">
                <tree>
                    <field name="name"/>
                    <field name="date"/>
                    <field name="state"/>
                    <field name="city"/>
                    <field name="county"/>
                    <field name="street"/>
                    <field name="ill_type"/>
                    <field name="within_or_abroad"/>
                </tree>
            </field>
        </record>
    <!-- 表格内容结束-->
    
    <!--form页面开始-->
    <!--    form页面开始用于显示 详情或者新增 id自定义 model只能写这个-->
        <record id="epidemic_record_form_view" model="ir.ui.view">
    <!--        名称-->
            <field name="name">疫情记录</field>
    <!--        模型-->
            <field name="model">epidemic.record</field>
    <!--        字段和格式设置-->
            <field name="arch" type="xml">
                <form>
    <!--                sheet用于划分板块-->
                    <sheet>
    <!--                    分组类似bootstrap的栅格化系统,第一个group类似于row,后面的group类似于col-->
                        <group>
                            <group>
                                <field name="name" string="姓名" required="1"/>
                                <field name="is_ill" string="是否确诊"/>
                                <field name="within_or_abroad" string="境内/境外感染"  required="1"/>
                                <field name="date" string="确诊日期"  attrs="{'invisible':[('is_ill','=',False)],'required':[('is_ill','=',True)]}"/>
                                <field name="ill_type" string="感染方式"  attrs="{'invisible':[('is_ill','=',False)],'required':[('is_ill','=',True)]}"/>
                                <field name="begin_lsolation_date" string="起始隔离时间" attrs="{'invisible':[('is_ill','=',True)],'required':[('is_ill','=',False)]}"/>
                                <field name="lsolation_mode" string="隔离方式" attrs="{'invisible':[('is_ill','=',True)],'required':[('is_ill','=',False)]}"/>
                            </group>
                            <group>
                                <field name="state" string="省"  required="1"/>
                                <field name="city" string="市"  required="1"/>
                                <field name="county" string="区/街道"/>
                                <field name="street" string="具体地址"  required="1"/>
                                <field name="create_user_id" string="填报人" readonly="1"/>
                            </group>
                        </group>
    <!--                        后面其他字段-->
                        <notebook>
    <!--                        分类标签可以有多个-->
                            <page string="说明">
                                <field name="note" placeholder="其他信息"/>
                            </page>
                        </notebook>
                    </sheet>
    
                </form>
    
            </field>
    
        </record>
    <!--form页面结束-->
    
    <!-- 动作配置-->
        <record id="epidemic_record_act_window" model="ir.actions.act_window">
    <!--        名字-->
            <field name="name">疫情记录</field>
    <!--        模型-->
            <field name="res_model">epidemic.record</field>
    <!--        当前模型允许那些动作-->
            <field name="view_mode">tree,form</field>
        </record>
    <!-- 动作配置结束-->
    
    <!--搜索配置开始-->
        <record id="epidemic_record_search_window" model="ir.ui.view">
    <!--        名字-->
            <field name="name">疫情记录</field>
    <!--        模型-->
            <field name="model">epidemic.record</field>
    <!--      字段和规则配置-->
            <field name="arch" type="xml">
    <!--            search用于配置搜索(模糊查询)-->
                <search>
                    <field name="name"/>
                    <field name="state"/>
    <!--                filter用配置过滤-->
                    <filter string="已确诊" name="is_ill" domain="[('is_ill','=',True)]"/>
                    <filter string="未确诊" name="is_ill" domain="[('is_ill','=',False)]"/>
    <!--                分组查询-->
                    <group expand="1">
                        <filter string="是否确诊" name="is_ill" context="{'group_by':'is_ill'}"/>
                        <filter string="填报人" name="create_user_id" context="{'group_by':'create_user_id'}"/>
                    </group>
                </search>
            </field>
        </record>
    <!--搜索配置结束-->
    
    <!--菜单配置开始-->
    <!--    跟菜单-->
        <menuitem name="疫情记录" id="epidemic_record_menu_root" groups="base.group_user" sequence="10"/>
    <!--    子菜单 id自定义不能重复 parent父级菜单 action关联的动作id sequence排序-->
        <menuitem name="疫情记录"
                  id="sec_epidemic_record_menu"
                  parent="epidemic_record_menu_root"
                  action="epidemic_record_act_window"
                  sequence="10"/>
    <!--    菜单配置结束-->
    </odoo>
     
  • 相关阅读:
    Python Data Type
    Python 基础二
    Python的基础知识
    查看当前进程
    linux 通过服务名称查找目录
    在linux下登录MySQL,发现无法输入密码?
    多米诺骨牌效应
    MySQL MVCC底层原理详解MySQL MVCC底层原理详解
    C#保留小数点后几位
    在ubuntu服务器上安装mysql并配置外网访问
  • 原文地址:https://www.cnblogs.com/wtil/p/15087849.html
Copyright © 2011-2022 走看看