模块基本目录
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>