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>

 

 

posted on 2021-08-01 22:05  信奉上帝的小和尚  阅读(257)  评论(0编辑  收藏  举报

导航